Метаданные для функции func-1
, метаданные для Var #'func-1
и метаданные для символа 'func-1
. Макрос читателя Clojure ^
добавляет метаданные к символу во время чтения. Макрос defn
копирует метаданные из символа в Var во время компиляции.
До Clojure 1.2 функции не поддерживали метаданные. В Clojure 1.2 они делают это, и defn
также копирует некоторые стандартные метаданные Var в функцию :
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 .