我试图调用我的一个类属性编写器,但由于某种原因它永远不会被调用。这里有一些代码可以让我更清楚:
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 =添加一个调试语句表明它永远不会被调用。我做错了什么?
更新
我部分地重写了这个问题,因为当我写这个问题时我并没有真正理解这个问题。所以这个问题现在更加普遍。
答案 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.
前置!“