Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Ruby中创建从另一个类继承的类_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 在Ruby中创建从另一个类继承的类

Ruby on rails 在Ruby中创建从另一个类继承的类,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我正在尝试创建一个名为Musitor的类,该类继承自我的类Person,然后添加一个instrument属性。我知道我的音乐课错了,但我只是想知道Ruby的正确格式是什么。以下是我的全部代码: class Person attr_reader :first_name, :last_name, :age def initialize (first_name, last_name, age) @first_name = first_name @last_name = last

我正在尝试创建一个名为Musitor的类,该类继承自我的类Person,然后添加一个instrument属性。我知道我的音乐课错了,但我只是想知道Ruby的正确格式是什么。以下是我的全部代码:

class Person
  attr_reader :first_name, :last_name, :age
  def initialize (first_name, last_name, age)
    @first_name = first_name
    @last_name = last_name
    @age = age
  end
end

p = Person.new("Earl", "Rubens-Watts", 2)
p.first_name
p.last_name
p.age


class Musician < Person
  attr_reader :instrument
  def initialize (instrument)
    @instrument = instrument
  end
end

m = Musician.new("George", "Harrison", 58, "guitar")
m.first_name + " " + m.last_name + ": " + m.age.to_s
m.instrument
班级人员
属性读取器:名字、姓氏、年龄
def初始化(名字、姓氏、年龄)
@first_name=first_name
@姓氏=姓氏
@年龄=年龄
结束
结束
p=新的人(“伯爵”、“鲁本斯·瓦茨”,2)
p、 名字
p、 姓
p、 年龄
班级音乐人
属性读取器:仪器
def初始化(仪表)
@仪器
结束
结束
m=音乐家。新(“乔治”,“哈里森”,58,“吉他”)
m、 名+姓+姓:“+m.age.to”
m、 仪器

谢谢你的帮助

这是扩展类的格式

问题是您调用的
音乐家
初始值设定项的属性比它接受的属性多

您收到的错误消息非常明确地说明了这一点。当报告或请求有关错误的帮助时,应该共享您收到的错误消息,这样我们就不必猜测或运行您的程序

您至少有以下选项:

  • 音乐家
    一个
    initialize
    ,它获取所有参数,抓取乐器,并传递其余参数
  • 使用Rails的基于散列的
    初始化
    (或者自己滚动,但您用Rails标记了它)

如果您想在Mushier中使用名字、姓氏和年龄,则必须将其包含在初始值设定项中,并利用
super
。比如:

class Musician < Person
  attr_reader :instrument

  def initialize(first_name, last_name, age, instrument)
    super(first_name, last_name, age)
    @instrument = instrument
  end
end

我们没有将参数更改为initialize,但已经扩展了行为。

谢谢。因此,如果要在Ruby中创建一个从父类继承三个或更多属性的类,则必须使用super?如果重写父类中的方法,但仍希望从子类的方法中访问父类的行为,则必须使用super。它不是
初始化
所独有的。
class GuitarPlayer < Person
  attr_reader :instrument

  def initialize(first_name, last_name, age)
    super(first_name, last_name, age)
    @instrument = 'guitar'
  end
end