2009-07-24 9 views
29

आपने अपने क्लोजर कार्यक्रम में मेटाडेटा का उपयोग कैसे किया है?क्लोजर मेटाडेटा के कुछ उपयोग क्या हैं?

(defn shout [#^{:tag String} message] (.toUpperCase message)) 
;; Clojure casts message to String and then calls the method. 

क्या कुछ प्रयोग हैं:

मैं प्रोग्रामिंग Clojure से एक उदाहरण देखा था? प्रोग्रामिंग का यह रूप मेरे लिए बिल्कुल नया है।

उत्तर

1

मेटाडाटा का उपयोग किसी ऑब्जेक्ट के प्रकार को संग्रहीत करने जैसी चीजों के लिए बड़े पैमाने पर कंपाइलर द्वारा किया जाता है।
आप इस का उपयोग करें जब आप प्रकार संकेत

(defn foo [ #^String stringy] .... 

मैं गद्दी की राशि है कि एक नंबर के लिए जोड़ा गया भंडारण जैसी चीजों के लिए इसका इस्तेमाल किया दे। इसका उद्देश्य डेटा के लिए 'ऑर्थोगोनल' है और यह तय करने पर विचार नहीं किया जाना चाहिए कि क्या आप मूल्य समान हैं या नहीं।

24
  • डॉकस्ट्रिंग को मेटाडाटा के रूप में संग्रहीत किया जाता है: डॉक्टर कुंजी। यह शायद मेटाडेटा का नंबर 1 सबसे स्पष्ट उपयोग है।
  • रनटाइम पर प्रकारों को प्रतिबिंबित करने के ओवरहेड से बचकर प्रदर्शन में सुधार के लिए रिटर्न और पैरामीटर प्रकार को वैकल्पिक रूप से मेटाडेटा के साथ टैग किया जा सकता है। इन्हें "प्रकार संकेत" के रूप में भी जाना जाता है। #^String एक प्रकार का संकेत है।
  • कंपाइलर द्वारा उपयोग के लिए "हुड के नीचे" चीजें संग्रहीत करना, जैसे किसी फ़ंक्शन के अग्रदूत, रेखा संख्या जहां एक var परिभाषित किया गया है, या कोई var एक मैक्रो का संदर्भ रखता है। ये आमतौर पर संकलक द्वारा स्वचालित रूप से जोड़े जाते हैं और आमतौर पर उपयोगकर्ता द्वारा सीधे छेड़छाड़ की आवश्यकता नहीं होती है।
  • एक समारोह परिभाषा के भाग के रूप में सरल testcases बनाना:

    (defn #^{:test (fn [] (assert true))} something [] nil)

    (test #'something)

आप पढ़ रहे हैं प्रोग्रामिंग Clojure, तो अध्याय 2 मेटाडाटा के लिए एक अच्छा परिचय प्रदान करता है। चित्रा 2.3 सामान्य मेटाडाटा का एक अच्छा सारांश प्रदान करता है।

14

विविधता के लिए कुछ जवाब है, जो अपने आप में भाषा के साथ बातचीत पर ध्यान केंद्रित नहीं करता है:

भी कर सकते हैं जैसे। कुछ डेटा के स्रोत को ट्रैक करें। अनचेक इनपुट :tainted के रूप में चिह्नित किया गया है। एक वैधकर्ता चीजों की जांच कर सकता है और फिर स्थिति को :clean पर सेट कर सकता है। कोड प्रासंगिक सुरक्षा कर रहे हैं तो :tainted पर बारफ हो सकता है और केवल :clean एड इनपुट स्वीकार कर सकता है।

5

टाइपिंग के प्रयोजनों के लिए मेटा डेटा मेरे लिए बेहद उपयोगी था। मैं सिर्फ संकेत संकेतों के बारे में बात नहीं कर रहा हूं, लेकिन पूर्ण कस्टम प्रकार प्रणाली के बारे में बात कर रहा हूं। सबसे सरल उदाहरण - structs के लिए प्रिंट विधि का अधिक भार (या किसी अन्य वर):

(defstruct my-struct :foo :bar :baz) 

(defn make-my-struct [foo bar baz] 
    (with-meta (struct-map my-struct :foo foo :bar baz :baz baz) 
     {:type ::my-struct})) 


(defmethod print-method 
    [my-struct writer] 
    (print-method ...)) 

सामान्य तौर पर, एक साथ Clojure मान्यता क्षमताओं के साथ यह एक ही समय में सुरक्षा को बढ़ा सकता है और,, बहुत बहुत अपने कोड का लचीलापन (हालांकि वास्तविक कोडिंग करने में कुछ और समय लगेगा)।

टाइपिंग पर अधिक विचारों के लिए types-api देखें।