करने के लिए सेट यदि मैं यह गहरे लाल रंग का कोड निष्पादित करें:रूबी: विधि बेवजह ओवरराइट और शून्य
def foo
100
end
p defined?(foo), foo
if false
foo = 200
end
p defined?(foo), foo
उत्पादन मैं मिलता है:
"method"
100
"local-variable"
nil
कोई क्यों foo
nil
पर सेट है मेरे लिए व्याख्या कर सकते हैं अगर निष्पादित नहीं किया जा रहा है? क्या यह अपेक्षित व्यवहार या रूबी बग है?
विधि ओवरराइट और शून्य पर सेट नहीं है के साथ वाट (https://www.destroyallsoftware.com/talks/wat) में इसके बारे में मज़ा आता है। 'foo() 'अभी भी काम करता है। क्या होता है कि एक स्थानीय चर 'foo' अस्तित्व में आया है। क्षमा करें, लेकिन मैं जवाब नहीं दे सकता कि ऐसा क्यों होता है। – Mischa
मैं भी जवाब नहीं दे सकता क्यों। लेकिन यदि स्थानीय चर और विधियों के बीच कभी भी अस्पष्टता है, तो विधि के लिए 'self.foo' का उपयोग करना सुनिश्चित करें, और चर के लिए' foo' का उपयोग करना सुनिश्चित करें। –
@sawa - मैं फिर से रोलबैक नहीं करूंगा, लेकिन मुझे आपकी टिप्पणी नहीं समझती है और मुझे समझ में नहीं आता कि आपने Bmesuere के प्रश्न को क्यों बदल दिया। सवाल के साथ कुछ भी गलत नहीं है। मुझे इसे संपादित करने की आवश्यकता नहीं दिख रही है। – Mischa