问题是,当我尝试使用产品时,它可以工作,但是使用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
答案 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>