Рубиновые условно-присваивающие и частные методы
Из кода ниже, кажется,||=
Оператор оценивается вне класса.
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, что позволяет мне полагать, что это не ошибка.