Aşağıdaki koddan, ||=
işleci, sınıfa dışarıdan değerlendirilmektedir.Yakut Koşullu-Ödev ve Özel Yöntemler
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)
Official expansion of ||= conditional assignment operator tarihinde kabul edilen yanıt alıntı:
In other words, the expansion c = c || 3 is (excluding bugs like in pre-1.9) correct.
hata yükseltmek değil self.bar = self.bar || 'baz'
olarak baz
yöntemini Yeniden Yazma. Yakut bu şekilde davrandığını neden karşı sezgisel görünüyor beri
Ben nasıl ve üzerinde kesin bir cevap arıyorum.
Bu davranış Ruby'nin 1.9.3, 2.0.0 ve 2.1.2 sürümlerinde bulunmaktadır; bu, bunun bir hata olmadığına inanmamı sağlar.
'self.bar || = 'baz''' kendini ifade eder .bar || self.bar = 'baz'. –
@ArupRakshit ama neden bir hata attığını açıklamıyor, değil mi? –
@FarrukhAbdulkadyrov Bu açıklama değildi, OP için. sözdizimi '|| = yanlış yorumladı… –