我无法理解的是
def初始化(awesome_level2) @ awesome_level2 = awesome_level2
@ awesome_level2是否必须与awesome_level2具有相同的名称?
如果我改变它,它似乎无法正常工作
class Awesome
attr_accessor :awesome_level2
def initialize(awesome_level2)
p awesome_level2 #100
@awesome_level2 = awesome_level2
P @awesome_level2 #100
end
end
awesome_sauce = awesome.new(100)
puts awesome_sauce.awesome_level2 #100 where is awesome_level2 from?
awesome_sauce.awesome_level = 99
puts awesome_sauce.awesome_level #99
答案 0 :(得分:0)
attr_accessor
是一种便捷方法,可为您作为参数传递的符号创建getter和setter方法。然后,您可以直接访问它创建的实例变量,在本例中为@awesome_level2
。请注意,它前面有@
符号,表示它是一个实例变量。这与局部变量或没有@符号的方法参数不同。因此,在初始化方法中,变量名@awesome_list2
和awesome_list2
是不同的,可以包含不同的值。
正如@Prescott所说,似乎你试图将实例变量@awesome_list2
设置为传递给初始值设定项awesome_list2
的参数,但是却意外地用大写A写了它,只是将它设置为零,因为名为Awesome_list2
的对象(注意大写' A')不存在(我猜)。