有关于函数 func-1
的元数据、关于Var #'func-1
的元数据和关于符号 'func-1
的元数据。Clojure 阅读器宏在读取时^
将元数据添加到符号。宏在编译时将defn
元数据从符号复制到Var 。
在 Clojure 1.2 之前,函数不支持元数据。在 Clojure 1.2 中,它们会这样做,并且还会将一些标准Vardefn
元数据复制到函数中:
Clojure 1.2.0
user=> (defn ^{:foo :bar} func-1 [] nil)
#'user/func-1
user=> (meta func-1)
{:ns #<Namespace user>, :name func-1}
user=> (meta #'func-1)
{:foo :bar, :ns #<Namespace user>, :name func-1, ...
但是,在当前的 Clojure 1.3 快照中,defn
不会将任何元数据复制到函数中:
Clojure 1.3.0-master-SNAPSHOT
user=> (defn ^{:foo :bar} func-1 [] nil)
#'user/func-1
user=> (meta func-1)
nil
user=> (meta #'func-1)
{:foo :bar, :ns #<Namespace user>, :name func-1, ...
通常,如果您想获取定义的元数据,您需要Var上的元数据。