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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage