नीचे दिए गए कोड से, ऐसा लगता है कि ||=
ऑपरेटर का मूल्यांकन कक्षा के बाहर से किया जा रहा है। self.bar = self.bar || 'baz'
रूप baz
विधि नए सिरे से लिखना त्रुटि उठाना नहीं हैरूबी सशर्त-असाइनमेंट और निजी तरीके
In other words, the expansion c = c || 3 is (excluding bugs like in pre-1.9) correct.
:
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 पर स्वीकार किए जाते हैं जवाब से हवाला देते हुए।
मैं क्यों रूबी इस तरह से बर्ताव कर रही है कैसे और पर एक निश्चित जवाब रहा हूँ, क्योंकि यह काउंटर सहज लगता है।
यह व्यवहार रूबी संस्करण 1.9.3, 2.0.0 और 2.1.2 पर मौजूद है, जो मुझे विश्वास दिलाता है कि यह एक बग नहीं है।
'self.bar || = 'baz'' का मतलब' स्व .बार || self.bar = 'baz''। –
@ArupRakshit लेकिन यह अभी भी यह नहीं समझाता कि यह एक त्रुटि क्यों फेंकता है, है ना? –
@FarrukhAbdulkadyrov वह स्पष्टीकरण नहीं था, यह ओपी के लिए है। जिन्होंने वाक्यविन्यास '|| =' गलत तरीके से व्याख्या की ... –