我对变量的范围有点困惑,在ruby中我写了一个测试程序:
class Test
attr_reader :tester
def initialize(data)
@tester = data
end
def getData
tester
end
end
puts Test.new(11).getData
现在这个工作正常,attr_reader,但我的困惑是,因为我已经定义了attr_reader:tester然后为什么我不能去测试器=数据而不是@tester =数据,因为当在getData中检索数据时我只必须编写测试人员而不是@tester
答案 0 :(得分:1)
使用attr_reader
相当于
class Test
def initialize(data)
@tester = data
end
# attr_reader defines this method for you
def tester
@tester
end
def getData
tester
end
end
使用getData
的{{1}}方法相当于tester
。如果您使用self.tester
,则可以直接访问变量。当您使用@tester
时,您可以通过getter方法访问变量。
答案 1 :(得分:0)
attr_reader意味着应该读取:“相应的实例变量getter和setter 将为您创建方法。“这样我们首先得到数据,然后设置数据。
答案 2 :(得分:0)
some_name =
语法被解释为局部变量赋值。为了对实例变量进行赋值,即使它是self
,也必须显式设置接收器。在这种情况下,self.tester =
。