blocks and variable scope in Ruby -
Russ ऑलसेन के अलौकिक रूबी के p.226 से:
सभी चर जो कि करना या { से पहले दिखाई दे रहे हैं, अभी भी एक कोड ब्लॉक के अंदर दिखाई दे रहे हैं
अपने लिए यह देखने के लिए, मैं निम्नलिखित कोड चलाया
वर्ग Foo def आरंभिक एए = 1 एफ़ डीईएफ़ show_a डालता है "विधि से: एक का मान # {@ a}" उपज अंत अंत बार = Foo.new bar.show_a {ब्लॉक से "डालता है: एक का मान # है {@ ए}" }
आउटपुट, मेरे आश्चर्य के लिए,
विधि से: 1 का मान 1
ब्लॉक से: मान ए है
क्यों इसे @ ब्लॉक में नहीं बना रही है?
ठीक पहले
bar.show_a {डालता है" ब्लॉक से: एक का मान # {@ a} "} है, एक
डालता है <ए / <> कोड में चिपकाएं। यह शून्य भी होगा आप पाएंगे कि उस क्षेत्र में कोई भी
@ ए मौजूद नहीं है, क्योंकि
@ ए फ़ू वर्ग के एक उदाहरण चर है। तो ब्लॉक ईमानदारी से आसपास की गुंजाइश में
@ ए की कमी को दर्शाता है।
इसे दूसरे तरीके से स्थापित करने के लिए: एक ब्लॉक उस क्षेत्र पर बंद होता है जहां यह बनाया < / em>, नहीं, जहां यह बुलाया जाता है ।
Comments
Post a Comment