从类中调用属性访问器方法

时间:2009-02-23 03:16:28

标签: ruby

我试图调用我的一个类属性编写器,但由于某种原因它永远不会被调用。这里有一些代码可以让我更清楚:

class Test
  attr_reader :test

  def test=(val)
    puts 'Called'
    @test = val
  end

  def set_it(val)
    test = val
  end
end

obj = Test.new
obj.set_it 5
puts obj.test
=> nil

最后的puts语句输出'nil'。向test =添加一个调试语句表明它永远不会被调用。我做错了什么?

更新

我部分地重写了这个问题,因为当我写这个问题时我并没有真正理解这个问题。所以这个问题现在更加普遍。

2 个答案:

答案 0 :(得分:8)

你本身没有做任何“错误”。 Ruby只是认为你打算将局部变量test设置为val,而不是调用test=方法。 self.test = val会做你期望的事。

答案 1 :(得分:0)

以下是关于此(显然常见)问题的其他一些资源:

另一个Stack Overflow问题:Why do ruby setters need “self.” qualification within the class?

从此guys's blog

  

作为一个Ruby新手,你可能曾经做过race = "hooman",但发现它没有用,并对自己说:“我不会再让这件事发生在我身上。从现在开始,每当我调用方法时,我都会self.前置!“