试图了解Ruby的getter setter规则

时间:2015-04-26 05:17:13

标签: getter-setter

我无法理解的是

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

1 个答案:

答案 0 :(得分:0)

attr_accessor是一种便捷方法,可为您作为参数传递的符号创建getter和setter方法。然后,您可以直接访问它创建的实例变量,在本例中为@awesome_level2。请注意,它前面有@符号,表示它是一个实例变量。这与局部变量或没有@符号的方法参数不同。因此,在初始化方法中,变量名@awesome_list2awesome_list2是不同的,可以包含不同的值。

正如@Prescott所说,似乎你试图将实例变量@awesome_list2设置为传递给初始值设定项awesome_list2的参数,但是却意外地用大写A写了它,只是将它设置为零,因为名为Awesome_list2的对象(注意大写' A')不存在(我猜)。