Рубиновые условно-присваивающие и частные методы

Из кода ниже, кажется,||= Оператор оценивается вне класса.

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, что позволяет мне полагать, что это не ошибка.

Ответы на вопрос(1)

Ваш ответ на вопрос