Ruby Conditional-Assignment und Private Methoden
Aus dem folgenden Code geht hervor, dass||=
Operator wird von außerhalb der Klasse ausgewertet.
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)
Zitiert von der angenommenen Antwort anOffizielle Erweiterung von || = Bedingter Zuweisungsoperator:
In other words, the expansion c = c || 3 is (excluding bugs like in pre-1.9) correct.
Umschreiben derbaz
Methode alsself.bar = self.bar || 'baz'
löst den Fehler nicht aus.
Ich suche eine definitive Antwort aufWie undWarum Ruby verhält sich so, da es nicht intuitiv zu sein scheint.
Dieses Verhalten ist in den Ruby-Versionen 1.9.3, 2.0.0 und 2.1.2 vorhanden, was mich zu der Annahme veranlasst, dass dies kein Fehler ist.