Ruby Conditional-Assignment y métodos privados

Del código a continuación, aparece el||= El operador está siendo evaluado desde fuera de la clase.

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)

Citando de la respuesta aceptada enExpansión oficial de || = operador de asignación condicional:

In other words, the expansion c = c || 3 is (excluding bugs like in pre-1.9) correct.

Reescribiendo elbaz método comoself.bar = self.bar || 'baz' No plantea el error.

Estoy buscando una respuesta definitiva sobrecómo ypor qué Ruby se está comportando de esta manera, ya que parece contrario a la intuición.

Este comportamiento está presente en las versiones de Ruby 1.9.3, 2.0.0 y 2.1.2, lo que me lleva a creer que esto no es un error.

Respuestas a la pregunta(1)

Su respuesta a la pregunta