関数 のメタfunc-1
データ、Var #'func-1
のメタデータ、シンボル 'func-1
のメタデータがあります。Clojureリーダーマクロは、読み取り時にシンボル^
にメタデータを追加します。マクロは、コンパイル時にメタデータをシンボルからVarにコピーします。defn
Clojure 1.2より前は、関数はメタデータをサポートしていませんでした。Clojure 1.2では、これらは機能し、いくつかの標準的なVarメタデータを関数defn
にコピーします。
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のメタデータが必要です。