是否可以使用元数据创建新的var而无需通过“中间”var?
换句话说,我知道我可以做到以下几点:
(def a-var 2)
(def another-var (with-meta a-var {:foo :bar}))
但有没有办法在不首先创建another-var
的情况下创建a-var
?
答案 0 :(得分: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
答案 1 :(得分:6)
另请注意,(def another-var (with-meta a-var {:foo :bar}))
不会将元数据附加到 Var ,而是附加到值。因为在你的例子中a-var
拥有一个整数,所以我不希望你的例子完全起作用,因为整数不能保存元数据。
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)