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

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

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 =添加一个调试语句表明它永远不会被调用。 我究竟做错了什么?

更新

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

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

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

另一个Stack Overflow问题: 为什么ruby setter在课堂上需要“自我”资格?

从这个家伙的博客 :

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