ऐसा करने के लिए, संक्षेप में, आपको मैक्रो को फिर से लिखना होगा जैसा मूल मूल रूप से एक अलग नाम को प्रतिस्थापित कर रहा है (आप निश्चित रूप से ऐसा करने के लिए defmacro
का उपयोग करेंगे)। यह एकमात्र तरीका है क्योंकि यह संभव है क्योंकि मैक्रोज़ कोई मान नहीं लौटाते हैं, लेकिन बाद में कोड लिखते हैं जिसे बाद में मूल्यांकन किया जाना है।
Def को कोड के ब्लॉक के बजाय किसी मान को बाध्य करने की आवश्यकता है।
(डीईएफ़ प्रतीक init?)
बनाता है और इंटर्न या प्रतीक के नाम और वर्तमान नाम स्थान का मूल्य (एनएस) के एक नाम स्थान के साथ एक वैश्विक वर स्थित। यदि init की आपूर्ति की जाती है, तो इसका मूल्यांकन किया जाता है, और var की मूल बाध्यकारी परिणामस्वरूप मान पर सेट होती है। यदि init की आपूर्ति नहीं की जाती है, तो var की जड़ बाध्यकारी अप्रभावित है। def हमेशा रूट बाइंडिंग पर लागू होता है, भले ही var उस बिंदु पर थ्रेड-बाध्य है जहां डीफ़ कहा जाता है। def var स्वयं उत्पन्न करता है (इसका मूल्य नहीं)। यदि प्रतीक पहले ही नामस्थान में है और एक इंटर्न वाले var में मैप नहीं किया गया है तो अपवाद फेंकता है।
Clojure: Special Forms
मैक्रो से उनके रूपों का मूल्यांकन नहीं है:
मैक्रो कार्यों कि रूपों में हेरफेर, वाक्यात्मक अमूर्त के लिए अनुमति देता है। यदि कॉल का ऑपरेटर एक प्रतीक है जो एक वैश्विक वैर का नाम है जो मैक्रो फ़ंक्शन है, तो मैक्रो फ़ंक्शन कहा जाता है और को अनावश्यक ऑपरेंड फॉर्म [इटालिक्स मेरा] पास किया जाता है। मैक्रो का वापसी मूल्य उसके स्थान पर मूल्यांकन किया जाता है।
Clojure: Evaluation
संक्षेप में से
, मैक्रो के बिंदु मूल्यांकन देरी करने के लिए है, इसलिए def
एक प्रतीक करने के लिए बाध्य करने के लिए के लिए यह एक मूल्य प्रदान नहीं कर सकते।
ऐसी कोई चीज़ नहीं है जैसे 'clojure.contrib.def' और भी। https://groups.google.com/forum/#!topic/clojure/LhidPSlvX_Q – micrub