为什么我需要@来设置变量值

时间:2012-10-05 09:28:45

标签: ruby

我对变量的范围有点困惑,在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

3 个答案:

答案 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 =