defonce
मैक्रो (कई अन्य लोगों की तरह) आपको कुछ तर्क के रूप में कुछ मेटाडेटा निर्दिष्ट करने की अनुमति देता है। यह मेटाडाटा अक्सर संकलक को संकेत देने के तरीके के बारे में संकेत देने के लिए प्रयोग किया जाता है।
इस मामले में, ^:dynamic
मेटाडाटा कीवर्ड प्रदान किया जाता है, संकलक को यह बताते हुए कि यह प्रतीक binding
form के साथ रनटाइम पर गतिशील रूप से रीबाउंड होने के लिए अनुकूलित किया जाना चाहिए।
तारांकन सिर्फ एक सम्मेलन है कि अन्य डेवलपर्स को यह पता चल जाए कि प्रतीक नियमित तरीके से बाध्य नहीं है। वे इस तथ्य पर ध्यान आकर्षित करने के लिए हैं कि यह जिस तरह से आप उम्मीद करते हैं उसमें काम नहीं कर सकते हैं।
उदाहरण के लिए, binding
फ़ॉर्म थ्रेड स्थानीय है और प्रतीक केवल फ़ॉर्म के दायरे में ही रिबाउंड है।
(defonce ^:dynamic *my-var* false)
(binding [*my-var* true] *my-var*) ;; true
*my-var* ;; false
बाहर से *my-var*
का मूल्य का उपयोग करने का प्रयास बाध्यकारी मूल्य है कि आप उम्मीद कर रहे हैं वापस नहीं हो सकता है।
क्योंकि इस फ़ॉर्म को *special-var*
सम्मेलन के साथ दर्शाया गया है, हम जानते हैं कि सामान्य व्यवहार की अपेक्षा न करें और दस्तावेज को पढ़ सकें या कहीं और प्रतीक को संदर्भित करने से पहले कोड का अध्ययन कर सकें।
स्रोत
2016-01-09 10:32:17
** हम जानते हैं कि सामान्य व्यवहार की अपेक्षा न करें और कहीं और प्रतीक का उपयोग करने से पहले कोड का अध्ययन कर सकें। ** - क्या यह एक सिफारिश है? क्या होगा यदि यह एक बंद स्रोत पुस्तकालय था? –
यदि यह एक बंद स्रोत लाइब्रेरी है, तो आप दस्तावेज़ को पढ़ सकते हैं। यदि यह '* विशेष-वर्र्स *' का उपयोग कर बंद स्रोत लाइब्रेरी है और कोई दस्तावेज नहीं है, तो आपको शायद कुछ और उपयोग करने के बारे में सोचना चाहिए। –
** हम जानते हैं कि सामान्य व्यवहार की अपेक्षा न करें और कहीं और प्रतीक का उपयोग करने से पहले कोड का अध्ययन कर सकें। ** - क्या यह एक सिफारिश है? –