मैं उन खोजशब्दों में आया: :foo, ::foo, ::bar/foo, and :bar/foo
फू, :: foo, :: bar/foo, और: क्लोजर में बार/foo के बीच क्या अंतर है?
क्या आप उदाहरणों के साथ मतभेदों को समझा सकते हैं?
मैं उन खोजशब्दों में आया: :foo, ::foo, ::bar/foo, and :bar/foo
फू, :: foo, :: bar/foo, और: क्लोजर में बार/foo के बीच क्या अंतर है?
क्या आप उदाहरणों के साथ मतभेदों को समझा सकते हैं?
:foo
एक गैर पूरी तरह से योग्य कीवर्ड है। इसमें इसके साथ कोई नामस्थान नहीं है।
(name :foo) ; => "foo"
(namespace :foo) ; => nil
:bar/foo
एक नामस्थान-योग्य कीवर्ड है। नाम स्थान bar
है और कीवर्ड के नाम foo
(name :bar/foo) ; => "foo"
(namespace :bar/foo) ; => "bar"
::foo
है कीवर्ड के साथ वर्तमान नाम स्थान से जोड़ देंगे, यह पूरी तरह से योग्य बना रही है। वर्तमान नाम स्थान मान लिया जाये कि "उपयोगकर्ता" है:
*ns* ; => #namespace[user]
(name ::foo) ; => "foo"
(namespace ::foo) ; => "user"
::foo ; => :user/foo
::bar/foo
यह पूरी तरह से योग्य बनाने के लिए किसी भी अन्य नामों का विस्तार करने का प्रयास करेंगे:
(create-ns 'my.namespace) ; => #namespace[my.namespace]
(alias 'bar 'my.namespace) ; => nil
(name ::bar/foo) ; => "foo"
(namespace ::bar/foo) ; => "my.namespace"
::bar/foo ; => :my.namespace/foo
This article इसे अच्छी तरह से समझाता है।
टी एल; डॉ:
:foo
एक namespace किए बगैर खोजशब्द, यानि कि एक अयोग्य कीवर्ड है।:foo/bar
एक स्पष्ट नामस्थान foo
के साथ एक योग्य कीवर्ड है।::foo
एक स्वचालित रूप से योग्यता प्राप्त कीवर्ड है। यदि यह कीवर्ड किसी नामस्थान bar
के भीतर होता है, तो इसका मूल्यांकन :bar/foo
पर किया जाता है।::bar/foo
का नाम स्थान :baz/foo
के रूप में ही है, तो आप नाम स्थान bar :as baz
की आवश्यकता है।कोड में:
boot.user=> (ns foo)
nil
foo=> (ns bar (:require [foo :as f]))
nil
bar=> (def examples [:foo ::foo ::f/foo :bar/foo])
#'bar/examples
bar=> examples
[:foo :bar/foo :foo/foo :bar/foo]
bar=> (use 'clojure.pprint)
nil
bar=> (print-table (map (fn [example]
{:key example :namespace (namespace example)
:name (name example)})
examples))
| :key | :namespace | :name |
|----------+------------+-------|
| :foo | | foo |
| :bar/foo | bar | foo |
| :foo/foo | foo | foo |
| :bar/foo | bar | foo |
namespaced कीवर्ड में कई स्थानों की खोज करके पाया जा होता है कि अच्छी तरह से समझाया गया है। Https://clojuredocs.org/clojure.core/keyword और https://kotka.de/blog/2010/05/Did_you_know_III.html देखें – tar