6
मैं with-meta
और ^
रीडर मैक्रो का उपयोग करने के बीच अंतर के रूप में उलझन में हूं।साथ-मेटा बनाम^{} - क्लोजर
संलग्न मेटाडाटा भी baz
symbol
पाठक मैक्रो
user=> (def ^{:foo "bar"} baz {:my "value"})
#'user/baz
यह पुल बाहर
user=> (meta #'baz)
{:foo "bar", :ns #<Namespace user>, :name baz, :line 1, :file "NO_SOURCE_PATH"}
with-meta
user=> (def (with-meta 'baz2 {:foo "bar"}) {:my "value"})
CompilerException java.lang.RuntimeException: First argument to def must be a Symbol, compiling:(NO_SOURCE_PATH:1)
लेकिन ... उपयोग कर देते हैं का उपयोग कर
user=> (class (with-meta 'baz2 {:foo "bar"}))
clojure.lang.Symbol
मैं इसे मूल्य
user=> (def baz2 (with-meta {:my "value"} {:foo "bar"})
#'user/baz2
को संलग्न कर सकते हैं, लेकिन यह नहीं है एक ही
user=> (meta baz2)
{:foo "bar"}
user=> (meta #'baz2)
{:ns #<Namespace user>, :name baz2, :line 1, :file "NO_SOURCE_PATH"}
कोई इस व्याख्या कर सकते हैं?