Ruby - 参数数量错误(1/2)

时间:2014-10-13 12:46:26

标签: ruby

问题是,当我尝试使用产品时,它可以工作,但是使用Fruit并没有出现此错误:

shoppingCart.rb:7:in `initialize': wrong number of arguments (1 for 2) (Argument
Error)
        from shoppingCart.rb:21:in `initialize'
        from shoppingCart.rb:37:in `new'
        from shoppingCart.rb:37:in `<main>'

代码:

class Product
  attr_accessor :name
  attr_accessor :price
  attr_accessor :discount


  def initialize(name, price)
    @name = name
    @price = price
  end

  def calculatePrice
    puts "The price of the #{@name} is #{@price} euros"
  end

end

class Fruit < Product

  def initialize(name, price)
    super(name)
    super(price)
  end

  def discount()
    @discount = 10
  end
end

banana = Fruit.new("banana", 10)
banana.calculatePrice

2 个答案:

答案 0 :(得分:3)

您有错误,因为您在super中使用一个参数调用Fruit#initialize,但Product#initialize有两个参数。由于您不会在Fruit方法中对Fruit#initialize执行任何特定操作,因此您根本不需要此方法。

答案 1 :(得分:2)

当您从super致电Fruit#initialize时,它正在调用Product#initialize,它有两个参数。所以用两个参数调用一次,而不是每次调用一次:

super(name, price)

由于这些是Fruit#initialize本身所采用的相同参数,您也可以将它们保留为自动传递相同的参数:

super

但是,由于您未在Fruit中执行任何Fruit#initialize具体操作,因此您可以完全删除该方法以获得相同的结果:

class Product 
  def initialize(name, price)
     puts "Into Product#Initialize"
  end
end

class Fruit < Product
end

banana = Fruit.new(banana, 10)
# Into Product#Initialize
# => #<Fruit:0x007f9da91cef00>