Ruby超类

时间:2014-11-25 18:01:29

标签: ruby-on-rails ruby superclass

下面的节目试图接纳一位美国总统,以及法国总统的年龄和名字。问题在于,法国总统表示" 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)>'

我是红宝石的新手,所以任何提示或建议都将不胜感激。

1 个答案:

答案 0 :(得分:2)

替换它:

super(name)
super(age)

用这个:

super(name, age)

initialize中的President方法需要两个参数,而不是一个。

您甚至可以删除参数,默认情况下将传递参数:

super

更好的是,只需删除initalize子类中的整个President方法,因为它是继承的。