0

我对变量的范围有点困惑,在 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 = data 而不是 @tester = data,因为在 getData 中检索数据时我只需要写测试员而不是@tester

4

3 回答 3

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方法中 usingtester相当于self.tester. 如果你使用@tester你直接访问变量。使用时,tester您可以通过 getter 方法访问变量。

于 2012-10-05T09:34:32.197 回答
0

some_name =没有显式接收器的语法被解释为局部变量赋值。为了对实例变量进行赋值,您必须显式设置接收器,即使它是self. 在这种情况下,self.tester =

于 2012-10-05T10:03:31.680 回答
0

attr_reader 表示应该读为:“将为您创建相应的实例变量 getter 和 setter 方法。” 因此,首先我们获取数据,然后设置该数据。

于 2012-10-05T09:36:16.940 回答