我正在尝试创建一个名为Musician的类,它继承自我的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
感谢您的帮助!
答案 0 :(得分:1)
如果您希望在音乐家中使用first_name,last_name和age,则必须将它们包含在初始值设定项中并利用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
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
我们没有将参数更改为初始化,但我们扩展了行为。
答案 1 :(得分:0)
这是扩展课程的格式。
问题在于,您调用的Musician
初始化程序的属性多于它接受的属性。
您获得的错误消息明确说明了这一点。在报告或寻求有关错误的帮助时,应该共享您收到的错误消息,以便我们不必猜测或运行您的程序。
你至少有选择:
Musician
initialize
一个initialize
,其中包含所有参数,抓取乐器并通过其余参数。