这两个元数据声明之间的区别是什么?你为什么要用一个呢?
(def a0 ^{:answer-to-everything 42} {:language "ClojureScript"})
(def ^{:answer-to-everything 42} a1 {:language "ClojureScript"})
我认为在第一种情况下,元数据被添加到 map 之前,而在第二种情况下,元数据被添加到 var 之前。假设我是正确的,我仍然不明白为什么你会偏爱另一个。
答案 0 :(得分:2)
如果您希望元数据遵循从函数传递到函数的值,则使用第一种情况。当你不使用第二个时:
user> (def a0 ^{:answer-to-everything 42} {:language "ClojureScript"})
#'user/a0
user> (def ^{:answer-to-everything 42} a1 {:language "ClojureScript"})
#'user/a1
user> (print-the-metadata-from-a-function a0)
{:answer-to-everything 42}
nil
user> (print-the-metadata-from-a-function a1)
nil
nil
user> (print-the-metadata-from-a-function #'a1)
{:answer-to-everything 42, :line 74, :column 6, :file *cider-repl api*, :name a1, :ns #namespace[user]}
nil