में उद्धरण का उपयोग गैर-मूल्यांकन में क्लोजर परिणामों में उद्धरण। ':a
और :a
एक ही परिणाम लौटाएं। 'ए और: ए' के बीच क्या अंतर है? किसी का मूल्यांकन नहीं किया जाता है और अन्य मूल्यांकन स्वयं ही ... लेकिन क्या यह गैर-मूल्यांकन के समान है?क्लोजर
क्लोजर
उत्तर
':a
(quote :a)
के लिए आशुलिपि है।(eval '(quote form))
परिभाषा के अनुसारform
देता है। ऐसा कहने के लिए, यदि क्लोजर फ़ंक्शनeval
को इसकी तर्क सूची सूची प्राप्त होती है जिसका पहला तत्व प्रतीकquote
है, तो यह किसी भी तरह से इसे परिवर्तित किए बिना कहा गया सूची संरचना का दूसरा तत्व देता है (इस प्रकार यह कहा जाता है कि उद्धृत रूप है मूल्यांकित नहीं)। दूसरे शब्दों में, व्यवहारeval
जब यह तर्क(quote foo)
की सूची संरचना की सूची संरचना है, तोfoo
अपरिवर्तित लौटने की है, भले ही पर ध्यान न दिया जाए।जब आप शाब्दिक
:a
अपने कार्यक्रम में लिख, यह पढ़ने में कीवर्ड:a
के रूप में हो जाता है; यानी, पाठ:a
का ठोस टुकड़ा एक इन-मेमोरी डेटा संरचना में परिवर्तित हो जाता है जिसे:a
कीवर्ड कहा जाता है (लिस्प को होम्योनिक अर्थ है कि कभी-कभी लिस्प डेटा और डेटा के पाठ के प्रतिनिधित्व के बीच अंतर करना मुश्किल होता है, यहां तक कि जब यह स्पष्टीकरण उद्देश्यों के लिए उपयोगी होगा ...)।इन-स्मृति डेटा संरचना शाब्दिक
:a
करने के लिए इसी एक जावा वस्तु जो तरीकों आदि और जो दिलचस्प संपत्ति है कि समारोहeval
, जब यह एक तर्क के रूप में इस डेटा वस्तु प्राप्त करता है, रिटर्न की एक संख्या को उजागर करता है यह अपरिवर्तित है। दूसरे शब्दों में, कीवर्ड का "खुद का मूल्यांकन" जो आप पूछते हैं वहeval
व्यवहार को के रूप में किसी कीवर्ड में पारित करने के लिए व्यवहार है।इस प्रकार जब
eval
देखता':a
, यह एक उद्धृत फार्म के रूप में व्यवहार करता है और उसके दूसरे भाग देता है, जो:a
होता है। दूसरी तरफ,eval
:a
देखता है, यह इसे एक कीवर्ड के रूप में मानता है और इसे अपरिवर्तित करता है। वापसी मूल्य दोनों मामलों में समान है (यह केवल कीवर्ड:a
है); मूल्यांकन प्रक्रिया थोड़ा अलग है।Clojure अर्थ विज्ञान - वास्तव में लिस्प अर्थ विज्ञान, लिस्प के किसी भी बोली के लिए - मूल्यों से लौट आए और दुष्प्रभाव समारोह
eval
जब यह तर्क के रूप में विभिन्न लिस्प डेटा संरचनाओं प्राप्त करता है की वजह से के संदर्भ में निर्दिष्ट कर रहे हैं। इस प्रकार उपर्युक्त बताता है कि वास्तव में क्या होता है जब आप अपने प्रोग्राम में':a
या:a
लिखते हैं ((println :a)
जैसे कोड कुशल बाइटकोड में संकलित हो सकते हैं जो वास्तव मेंeval
फ़ंक्शन को कोड नहीं करता है, लेकिन अर्थशास्त्र हमेशा संरक्षित होते हैं, इसलिए कि यह अभी भी कार्य करता है जैसे कि यहeval
था जिसमेंprintln
और कीवर्ड:a
) युक्त एक सूची संरचना प्राप्त हुई थी।कुंजी यहाँ विचार है कि है कि क्या प्रपत्र मूल्यांकन किया जा रहा
':a
या:a
है की परवाह किए बिना, कीवर्ड डेटा संरचना पढ़ा समय में निर्माण किया है है; तब जब इन रूपों में से एक का मूल्यांकन किया जाता है, तो डेटा संरचना अपरिवर्तित लौटा दी जाती है - हालांकि विभिन्न कारणों से।
विस्तृत स्पष्टीकरण Michal के लिए धन्यवाद। तो eval ': ए' के प्रकार को देखेंगे और जैसा कि एक कीवर्ड वापस आ जाएगा: ए? –
@ इकरस: आपका स्वागत है। और हां, eval रिटर्न ': एक' अपरिवर्तित क्योंकि यह जानता है कि यह कीवर्ड के साथ क्या करना है। आंतरिक रूप से यह वास्तव में जेएमवी द्वारा प्रदान की गई कक्षा-आधारित प्रेषण की सुविधाओं का उपयोग करते हुए, कंपाइलर में कक्षा-आधारित प्रेषण के रूप में लागू किया जाता है; लेकिन यह एक कार्यान्वयन विस्तार है। –
मुझे लगता है 2. होना चाहिए (eval (उद्धरण फ़ॉर्म)) –
- 1. क्लोजर क्लोजर
- 2. क्लोजर (fkmeans) क्लोजर
- 3. क्लोजर संपादक क्लोजर
- 4. क्लोजर
- 5. क्लोजर
- 6. क्लोजर
- 7. क्लोजर
- 8. क्लोजर
- 9. क्लोजर
- 10. क्लोजर
- 11. क्लोजर
- 12. क्लोजर
- 13. क्लोजर
- 14. क्लोजर
- 15. क्लोजर
- 16. क्लोजर
- 17. क्लोजर
- 18. क्लोजर
- 19. क्लोजर
- 20. क्लोजर
- 21. क्लोजर
- 22. क्लोजर
- 23. क्लोजर
- 24. क्लोजर
- 25. क्लोजर
- 26. क्लोजर
- 27. क्लोजर
- 28. क्लोजर
- 29. क्लोजर
- 30. क्लोजर
यह स्पष्ट नहीं है कि आप क्या पूछ रहे हैं। क्या आपका मतलब है "क्लोजर रीडर कैसे काम करता है?" किस तरह की स्पष्टीकरण आपके प्रश्न का उत्तर देगी? तथ्य यह है कि कीवर्ड खुद का मूल्यांकन करते हैं। उस संदर्भ में "कैसे" का अर्थ है? –
मैं सहमत हूं। इसका एक "यह एक गैर-मूल्यांकन के समान है"। इस पर ध्यान दिलाने के लिए धन्यवाद। –