मेरे पास एक क्लोजर प्रोग्राम है जिसे मैं मैवेन का उपयोग कर एक जेएआर फ़ाइल के रूप में बनाता हूं। जेएआर मैनिफेस्ट में एंबेडेड एक बिल्ड-वर्जन नंबर है, जिसमें बिल्ड टाइमस्टैम्प भी शामिल है।रनटाइम पर क्लोजर "स्थिरांक" सेट करना
मैं आसानी से निम्नलिखित कोड का उपयोग कर जार प्रकट से रनटाइम पर इस पढ़ सकते हैं:
(defn set-version
"Set the version variable to the build number."
[]
(def version
(-> (str "jar:" (-> my.ns.name (.getProtectionDomain)
(.getCodeSource)
(.getLocation))
"!/META-INF/MANIFEST.MF")
(URL.)
(.openStream)
(Manifest.)
(.. getMainAttributes)
(.getValue "Build-number"))))
लेकिन मुझे बताया गया है कि यह बुरे कर्म defn
अंदर def
उपयोग करने के लिए है।
रनटाइम पर निरंतर सेट करने के लिए क्लोजर-बेवकूफ तरीका क्या है? मेरे पास स्पष्ट रूप से def
के रूप में मेरे कोड में एम्बेड करने के लिए बिल्ड-संस्करण जानकारी नहीं है, लेकिन मैं प्रोग्राम शुरू होने पर main
फ़ंक्शन से एक बार (और सभी के लिए) सेट करना चाहता हूं। इसके बाद इसे चल रहे कोड के def
के रूप में उपलब्ध होना चाहिए।
अद्यतन: बीटीडब्ल्यू, क्लोजर को थोड़ी देर में आने वाली सबसे अच्छी भाषाओं में से एक होना है। रिच हिकी के लिए कुडोस!
मैंने कोशिश नहीं की है, लेकिन मैं करूँगा। दिलचस्प लगता है। मान सेट होने के बाद कोई प्रदर्शन दंड नहीं। मैं कमांड लाइन विकल्पों से मूल्यों को सेट करने के लिए इस तकनीक का भी उपयोग कर सकता हूं - केवल एक बार सेट करने की आवश्यकता है। – Ralph