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.