^
है "मेटा चरित्र" यह the reader बताता प्रतीक ^
अगले प्रतीक को मेटाडाटा के रूप में के साथ शुरू जोड़ने के लिए (यह प्रदान की
012: कुछ है कि IMetas लागू करता है)
user=> (def x ^:IamMeta [1 2 3])
#'user/x
user=> x
[1 2 3]
user=> (meta x)
{:tag :IamMeta}
user=>
आप चीजों की meta
को देखकर हुड के नीचे कैसे clojure काम करता है के बारे में बहुत कुछ सीख सकते हैं, उदाहरण के कार्यों के लिए है
user=> (meta foo)
{:ns #<Namespace user>,
:name foo, :file "NO_SOURCE_PATH",
:line 5, :arglists ([s])}
इस बहुत बार के लिए type hints
(defn foo [^String s] (.charAt s 1))
यह आम तौर पर एक अच्छा विचार किया जाता है (set! *warn-on-reflection* true)
प्रतिबिंब चेतावनी को चालू करना और तब तक चेतावनी चले जाओ प्रकार संकेत जोड़ने के लिए है। इन क्लोजर के बिना रन-टाइम पर फ़ंक्शन ऑपरेंड के प्रकार को देखेंगे, जो आपको थोड़ी सी कीमत पर टाइप के साथ परेशान करने की परेशानी बचाता है।
पुनश्च: मेरा अगला पसंदीदा पाठक चरित्र, "प्रेषण" चरित्र #
है इसके लायक अगले :)
पी पी एस यह के बारे में सीखने है: इस clojure 1.2.x बनाम clojure 1.3.x में में अलग है Clojure 1.2.1 मेटाडाटा रचना नहीं होती जब आप मेटा-चरित्र का उपयोग करें:
user=> (def foo ^:foo ^:bar [1 2 3])
#'user/foo
user=> (meta foo)
{:tag :foo}
और 1.3 में यह "सही काम करता है" और यह भी कीवर्ड "टैग" के बजाय विकल्प हैं:
user=> (def foo ^:foo ^:bar [1 2 3])
#'user/foo
user=> (meta foo)
{:foo true, :bar true}
स्रोत
2012-01-19 02:05:46
यह बिल्कुल "प्रतीक जोड़ें" नहीं है। प्रतीक एक प्रकार int के लिए शॉर्ट-कट है। लेकिन यह तारों के साथ भी काम करता है, उदाहरण के लिए। '^" बी [ "'। कीवर्ड विकल्पों में अनुवादित हैं, उदाहरण के लिए। '^: foo' को' {: foo true} 'में बदल दिया गया है। और अंत में आप एक मानचित्र स्वयं निर्दिष्ट कर सकते हैं, उदाहरण के लिए। '^ {: टैग स्ट्रिंग: foo true: bar: baz}'। – kotarak
अच्छा बिंदु कोटरक, हमें यह भी उल्लेख करना चाहिए कि मेटाडाटा क्लोजर के विभिन्न संस्करणों में अलग-अलग रचना करता है और मेरा मानना है कि 1.3 कांटेदार मेटाडाटा को कॉपी करना शुरू होता है^^ foo ^: bar [1 3 4] ' –