下面的节目试图接纳一位美国总统,以及法国总统的年龄和名字。问题在于,法国总统表示" bein sur"之后称他的名字,年龄和公民身份(不是我的想法)。我在与法国总统的口号上遇到麻烦。这是我的代码
class President
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
def name=(name) # setter
@name = name
end
def name # getter
@name
end
def age=(age)
@age = age
end
def age
@age
end
end
class FrancePresident < President
def self.citizenship
"La France"
end
def initialize(name, age)
super(name)
super(age)
end
def catchphrase
"bein sur"
end
end
class UnitedStatesPresident < President
def self.citizenship
"The Unites States of America"
end
end
我用他的口号的实例方法是许多让这个人说这句话的最后一次尝试,但它不完整,我想我应该定义对超级的调用获得他的名字和年龄的课程,但我不确定如何克服这个论点错误。
ArgumentError
wrong number of arguments (1 for 2)
exercise.rb:4:in `initialize'
exercise.rb:32:in `initialize'
exercise_spec.rb:24:in `new'
exercise_spec.rb:24:in `block (3 levels) in <top (required)>'
我是红宝石的新手,所以任何提示或建议都将不胜感激。
答案 0 :(得分:2)
替换它:
super(name)
super(age)
用这个:
super(name, age)
initialize
中的President
方法需要两个参数,而不是一个。
您甚至可以删除参数,默认情况下将传递参数:
super
更好的是,只需删除initalize
子类中的整个President
方法,因为它是继承的。