从下面的代码中,看起来||=
运算符是在类的外部进行评估的。
class Foo
attr_reader :bar
def baz
self.bar ||= 'baz'
end
private
attr_writer :bar
end
puts Foo.new.baz
# => in `baz': private method `bar=' called for #<Foo:0x007fd9720829a8> (NoMethodError)
引用来自官方扩展的||=条件赋值运算符的答案:
In other words, the expansion c = c || 3 is (excluding bugs like in pre-1.9) correct.
将baz
方法改写为self.bar = self.bar || 'baz'
不会引发错误。
我正在寻找一个明确的答案,解释Ruby出现这种看似违反直觉的行为的 如何和为什么。
由于这种行为在Ruby版本1.9.3、2.0.0和2.1.2中都存在,因此我认为这不是一个错误。
self.bar ||= 'baz'
的意思是self.bar || self.bar = 'baz'
。 - Arup Rakshit||=
的OP。 - Arup Rakshit