运行程序时,我遇到以下示例的错误。
错误如下:
burger.rb:8:in `initialize': wrong number of arguments (1 for 0) (ArgumentError)
from burger.rb:19:in `new'
from burger.rb:19:in `<main>'
此noob赞赏任何帮助,代码如下:
$toppings = false
class Burger
AVAILABLE_TOPPINGS = ["lettuce", "tomato", "onion", "cheese"]
attr_reader :options
def initialize
@toppings = []
end
def order
print "how many burgers would you like? "
number = gets.chomp
puts "#{number} burgers coming right up boss!"
end
end
burger = Burger.new("lettuce")
burger.order
答案 0 :(得分:2)
正如其他人所说,你的初始化程序期望没有参数但是你给它lettuce
。如果您正在使用ruby 2.1或更高版本,我建议使用关键字参数:
class Burger
TOPPINGS = %i[lettuce tomato onion cheese]
attr_reader :toppings
def initialize(toppings: [])
@toppings = TOPPINGS & toppings
end
end
这允许你做Burger.new(toppings: [:lettuce])
,我觉得它更具可读性。
答案 1 :(得分:1)
错误告诉您方法initialize
需要0参数,而您给它1("lettuce"
中的Burger.new("lettuce")
)。
你需要让initialize
期待一个论点:
def initialize(options)
@toppings = []
@options = options
end
答案 2 :(得分:0)
$toppings = false
是代码味道。全局通常不是必需的,只有在您完全确定需要它们时才能使用。当你第一次学习OO语言时,我认为最好避免它们并学习变量范围。
在这种情况下,您不要在示例代码中使用它,但确实使用了:
@toppings = []
(在其他地方也没有使用过)。将全局变量命名为与实例变量相同并不是一个好主意,因为当你指的是另一个时,它太容易使用了一个,并引入了一个bug。