"आर promises पास नहीं करता है, मान नहीं है। वादा तब किया जाता है जब इसे पहले मूल्यांकन किया जाता है, जब यह पारित नहीं होता है।", 0 ग्रोथेंडिक द्वारा this answer देखें। हैडली की पुस्तक का जिक्र करते हुए this question भी देखें।आर के 'आलसी मूल्यांकन जाल' में कैसे नहीं आते
सरल उदाहरणों में इस तरह के रूप में
> funs <- lapply(1:10, function(i) function() print(i))
> funs[[1]]()
[1] 10
> funs[[2]]()
[1] 10
यह खाते में इस तरह के unintuitive व्यवहार लेने के लिए संभव है।
हालांकि, मैं खुद को दैनिक विकास के दौरान अक्सर इस जाल में पड़ता हूं। मैं एक कार्यात्मक प्रोग्रामिंग शैली का पालन करता हूं, जिसका अर्थ है कि मेरे पास अक्सर एक फ़ंक्शन ए होता है जो एक फ़ंक्शन बी लौटाता है, जहां बी कुछ मायनों के आधार पर होता है जिसके साथ ए को बुलाया जाता है। निर्भरता उपर्युक्त उदाहरण के रूप में देखने के लिए आसान नहीं है, क्योंकि गणना जटिल हैं और कई पैरामीटर हैं।
ऐसी समस्या को देखते हुए समस्याएं डीबग करना मुश्किल हो जाता है, क्योंकि सभी गणना सुचारू रूप से चलती है - सिवाय इसके कि परिणाम गलत है। परिणामों के केवल एक स्पष्ट सत्यापन समस्या को प्रकट करता है।
शीर्ष पर क्या आता है यह है कि अगर मैंने ऐसी समस्या देखी है, तो भी मुझे सच में यकीन नहीं है कि मुझे कौन से चर force
और जो मैं नहीं करता हूं।
मैं कैसे सुनिश्चित कर सकता हूं कि इस जाल में न पड़ें? क्या कोई प्रोग्रामिंग पैटर्न है जो इसे रोकता है या कम से कम यह सुनिश्चित करता है कि मुझे पता है कि कोई समस्या है?
ऐसा लगता है कि यह आपकी प्रोग्रामिंग शैली का फिर से मूल्यांकन करने का एक अच्छा अवसर हो सकता है यदि आप ऐसी भाषा को मजबूर कर रहे हैं जो आप ऐसा करने के लिए कर रहे हैं जो इसे स्वाभाविक रूप से करने के लिए सेट नहीं है ... – Chase
... यही कारण है कि मैं उन समस्याओं के लिए पूछ रहा था जो इस समस्या को बाधित करते हैं। ;-) – jhin
यह सवाल ऐतिहासिक ब्याज की अब भी है, लेकिन आज के पाठकों को पता है कि आर 3.4.1 (शायद के रूप में जल्दी 3.2.0 के रूप में) ऑप्स में उदाहरण के रूप में कारणों funs पोस्ट दिलचस्पी हो सकती है [[5]]() परिणामस्वरूप '5'। – russellpierce