Ruby on rails 在Ruby中创建从另一个类继承的类
我正在尝试创建一个名为Musitor的类,该类继承自我的类Person,然后添加一个instrument属性。我知道我的音乐课错了,但我只是想知道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
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标记了它)
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