Clojure vars与元数据

Ral*_*lph 7 metadata clojure

是否可以使用元数据创建新的var而无需通过"中间"var?

换句话说,我知道我可以做到以下几点:

(def a-var 2)
(def another-var (with-meta a-var {:foo :bar}))
Run Code Online (Sandbox Code Playgroud)

但有没有办法创造another-var而不a-var先创造?

har*_*rto 6

像这样:

user> (def ^{:foo :bar} another-var 2)
#'user/another-var
user> (clojure.pprint/pprint (meta #'another-var))
{:ns #<Namespace user>,
 :name another-var,
 :file "NO_SOURCE_FILE",
 :line 1,
 :foo :bar}
nil
Run Code Online (Sandbox Code Playgroud)


kot*_*rak 6

另请注意,这(def another-var (with-meta a-var {:foo :bar}))不会将元数据附加到Var,而是附加到.因为在你的例子中a-var有一个Integer,我不希望你的例子完全可以工作,因为Integers不能保存元数据.

user=> (def a-var 2)
#'user/a-var
user=> (def another-var (with-meta a-var {:foo :bar}))
java.lang.ClassCastException: java.lang.Integer cannot be cast to clojure.lang.IObj (NO_SOURCE_FILE:2)
Run Code Online (Sandbox Code Playgroud)