दिलचस्प पोस्ट
फ्लश () का उपयोग बंद होने से पहले () जावा डीबगिंग करते समय वैरिएबल जानकारी को समझना पसंदीदा प्रदर्शन ट्यूनिंग ट्रिक्स संग्रहीत कार्यविधि परिणाम सेट के लिए स्तंभ परिभाषा को पुनर्प्राप्त करें क्रमबद्ध पेजिंग के लिए दिए गए रिकार्ड के लिए छोड़ मूल्य की गणना करें स्टाइल एंड्रॉइड स्पिनर ट्विटर बूटस्ट्रैप प्लगइन को कैसे विस्तारित करें एक मेकफाइल में वाइल्डकार्ड लक्ष्य मेरी WCF वेब सेवा इस ऑब्जेक्ट को अलग-अलग नामों के साथ अलग-अलग नामों के साथ क्यों प्रस्तुत करती है? सौंदर्यशास्त्र और geom_text का उपयोग करते समय लीजेंड से 'ए' निकालें MATLAB: एक सरणी में कम-पास या उच्च-पास फ़िल्टर लागू करें एक JSONP अनुरोध कैसे काम करता है पर उलझन में एक पेज में सभी (जावास्क्रिप्ट) ग्लोबल वैरिएन्ट्स ला रहा है Django डिफ़ॉल्ट प्रपत्र मान सेट करता है PostgreSQL क्वेरी में डीईएससी को आदेश देने पर नल मूल्य क्यों पहले आते हैं?

क्यों रूबी एक केस स्टेटमेंट के अंदर से चर घोषणाओं को ऊपर उठाने लगता है, भले ही उस कोड पथ को निष्पादित नहीं किया गया हो?

हम एक समारोह foo को परिभाषित करते हैं:

def foo(s) case s when'foo' x = 3 puts x.inspect when 'bar' y = 4 puts y.inspect end puts x.inspect puts y.inspect end 

हम इसे इस प्रकार कहते हैं:

 1.9.3p194 :017 > foo('foo') in foo scope 3 in outer scope 3 nil => nil 1.9.3p194 :018 > foo('bar') in bar scope 3 in outer scope nil 3 => nil 

फ़ंक्शन किसी अनियमित स्थानीय चर के बारे में किसी भी स्थिति में क्यों नहीं त्रुटि डालता है? पहले मामले में, चर y ऐसा लगता है कि यह मौजूद नहीं होना चाहिए, तो आप इसे बाहरी गुंजाइश में inspect नहीं कर सकते हैं; दूसरे मामले में x लिए एक ही है

यहां एक और उदाहरण है:

 def test1 x = 5 if false puts x.inspect end def test2 puts x.inspect end 

और तब:

 1.9.3p194 :028 > test1 nil => nil 1.9.3p194 :029 > test2 NameError: undefined local variable or method `x' for main:Object 

यहाँ क्या चल रहा है? ऐसा लगता है कि रूबी बाहरी घोषणा में चर घोषणा को उत्थान कर रहा है, लेकिन मुझे नहीं पता था कि यह रूबी है जो कुछ है। ("रूबी होस्टिंग" के लिए खोज केवल जावास्क्रिप्ट उत्थापन के बारे में परिणाम बदल जाता है।)

Solutions Collecting From Web of "क्यों रूबी एक केस स्टेटमेंट के अंदर से चर घोषणाओं को ऊपर उठाने लगता है, भले ही उस कोड पथ को निष्पादित नहीं किया गया हो?"

जब रूबी पार्सर अनुक्रम पहचानकर्ता, बराबर-चिह्न, मान, इस अभिव्यक्ति के रूप में देखता है

 x = 1 

यह एक स्थानीय चर के लिए अंतरिक्ष को आवंटित करता है जिसे x कहते हैं वैरिएबल का निर्माण-इसके लिए कोई मान का असाइनमेंट नहीं है, लेकिन इस तरह की अभिव्यक्ति के परिणामस्वरूप एक चर का आंतरिक सृजन हमेशा होता है, भले ही कोड निष्पादित न हो! इस उदाहरण पर विचार करें:

 if false x = 1 end px # Output: nil py # Fatal Error: y is unknown 

x को असाइनमेंट निष्पादित नहीं किया जाता है, क्योंकि यह एक असफल सशर्त परीक्षण में लिपटे है। लेकिन रूबी पार्सर अनुक्रम x = 1 देखता है, जिसमें से यह कटौती करता है कि इस कार्यक्रम में एक स्थानीय चर x । पारसर को कोई परवाह नहीं है कि क्या एक्स को कभी भी मूल्य निर्दिष्ट किया गया है। इसका काम सिर्फ स्थानीय चरों के लिए कोड परिमार्जन करना है जिसके लिए अंतरिक्ष को आवंटित किया जाना चाहिए। नतीजा यह है कि एक्स में एक विलक्षण प्रकार की असम्बद्धता है। इसे अस्तित्व में लाया गया है और nil आरंभ किया गया है। उस संबंध में, यह एक चर से भिन्न होता है जिसमें कोई अस्तित्व नहीं है; जैसा कि आप उदाहरण में देख सकते हैं, x जांच करना आपको मूल्य nil देता है, जबकि एक गैर-मौजूद चर के परिणाम की जांच करने की कोशिश कर रहा है जो गंभीर त्रुटि में परिणाम दिखाता है। लेकिन हालांकि x मौजूद है, इसने कार्यक्रम में कोई भूमिका नहीं निभाई है। यह पार्सिंग प्रक्रिया की एक कलाकृति के रूप में ही मौजूद है

अच्छी तरह से रूढ़िवादी रूढ़िवादी अध्याय 6.1.2

रूबी पार्सर हर लाइन के माध्यम से जाता है और सभी variable = शून्य पर सेट करता है। कोड को वास्तव में निष्पादित किया जाता है या नहीं, इससे कोई फर्क नहीं पड़ता

देखें कि मैं एक चर के बाहर का एक संदर्भ क्यों देख सकता हूं / जब तक / कभी नहीं चलने वाले कथन