r - Using the same argument names for a function defined inside another function -


क्यों करता है

  f & lt; - फ़ंक्शन (ए) {g & lt; - फ़ंक्शन (ए = ए) {वापसी (ए + 2)} रिटर्न (जी ())} एफ (3) # एक + 2 में त्रुटि: 'ए' गायब है  

एक त्रुटि का कारण ? यह एक = एक तर्क के साथ कुछ करना है, खासकर इस तथ्य के साथ कि वेरिएबल नाम समान हैं वास्तव में क्या हो रहा है?

यहां कुछ ऐसे कोड दिए गए हैं जो अपेक्षित रूप से काम करते हैं:

  f & lt; - फ़ंक्शन (ए) {g & lt; - फ़ंक्शन ( ए) {रिटर्न (ए + 2)} रिटर्न (जी (ए))} एफ एफ (3) # 5 एफ एंड एलटी; फ़ंक्शन (ए) {जी एंड एलटी; - फ़ंक्शन (जी_ए = ए) {रिटर्न (जी_ए + 2) } वापसी (जी ())} एफ (3) # 5 जी एंड एलटी; - फ़ंक्शन (ए) ए + 2 एफ एंड एलटी; - फ़ंक्शन (ए) जी (ए) एफ (3) # 5    

समस्या यह है कि,:

फ़ंक्शन के लिए डिफ़ॉल्ट तर्क का मूल्यांकन किया जाता है समारोह के मूल्यांकन फ्रेम में

अपने पहले कोड ब्लॉक में, जब आप जी () बिना किसी तर्क के कॉल करते हैं, तो यह a के डिफ़ॉल्ट मान पर वापस आ जाता है , जो एक है "फ्रेम्स ऑफ फ़्रेम" (यानी फोन द्वारा g () के लिए बनाया गया वातावरण) का मूल्यांकन करते हुए, यह उस तर्क को पाता है जिसका नाम प्रतीक a से मेल खाता है, और इसका मान a है जब वह उस a के मान को देखता है, तो उसे एक ऐसा तर्क मिल जाता है जिसका नाम उस प्रतीक से मेल खाता है, और जिसका मान है a जब ...

जैसा कि आप देख सकते हैं, आप एक लूप में फंस रहे हैं, जो कि त्रुटि संदेश आपको बताने का प्रयास कर रहा है:

  g में त्रुटि ): पहले से ही मूल्यांकन के तहत वादा: पुनरावर्ती डिफ़ॉल्ट तर्क संदर्भ या पहले की समस्याएं?  

आपका दूसरा प्रयास, जो g (a) कॉल करता है जैसा आपकी अपेक्षा है, क्योंकि आपने प्रदान की एक तर्क दिया है , और,:

फ़ंक्शन के लिए दिए गए तर्कों को कॉलिंग फ़ंक्शन के मूल्यांकन फ्रेम में मूल्यांकन किया जाता है।

वहां यह एक प्रतीक a पाता है, जो कि आपके द्वारा बाहरी फ़ंक्शन के औपचारिक तर्क को a में पारित किया गया है, और सब ठीक है।


Comments