क्लोजर में :: का प्रयोग किस लिए किया जाता है?


83

मैं क्लूजुर में होने वाले कीवर्ड को समझता हूं :keyword। लेकिन इसका ::उपयोग किस लिए किया जाता है? ऐसा क्यों लगता है कि यह एक बंधन है?

user=> :foo
:foo
user=> ::foo
:user/foo

जवाबों:


83

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


प्रदान किए गए औचित्य के रूप में, यह निश्चित रूप से निश्चित नहीं है कि पहली जगह में एक नक्शे में एक टिंकर क्यों होगा जो उनके लिए एक पुस्तकालय को संभालने वाला है। यदि यह वास्तव में मुख्य प्रेरणा है, तो कुछ स्पष्टता मदद कर सकती है।
matanster

3
one example could be ring middleware (similar to Servlet filters), with which you can enrich a map describing an HTTP request. Namespaced keys allow you to write your custom middleware to add extra values without worrying about interferences with any other middleware configured in your ring app.
skuro

27

As now documented for Clojure as well as for ClojureScript, :: keywords can also be used to resolve namespace aliases. For example, ::foo/bar will evaluate to :clojure.core/bar if foo is an alias of clojure.core. Reader exception is thrown if foo does not resolve to a namespace.



Also relevant, since Clojure 1.9, is #: and #:: syntax, which is used together with a map to resolve the keywords inside the map, as explained here.
Joe Corneli
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.