带有元数据的Clojure变量
是否可以使用元数据创建一个新的var,而不必经过“中间”var 换句话说,我知道我可以做到以下几点:带有元数据的Clojure变量,clojure,metadata,Clojure,Metadata,是否可以使用元数据创建一个新的var,而不必经过“中间”var 换句话说,我知道我可以做到以下几点: (def a-var 2) (def another-var (with-meta a-var {:foo :bar})) 但是有没有办法创建另一个var而不先创建a-var?像这样: user> (def ^{:foo :bar} another-var 2) #'user/another-var user> (clojure.pprint/pprint (meta #'anot
(def a-var 2)
(def another-var (with-meta a-var {:foo :bar}))
但是有没有办法创建另一个var而不先创建a-var?像这样:
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
user>(def^{:foo:bar}另一个变量2)
#'用户/另一个变量
用户>(clojure.pprint/pprint(meta#'另一个-var))
{:ns#,,
:命名另一个变量,
:文件“无源文件”,
:第1行,
:foo:bar}
无
还要注意,(定义另一个var(使用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)
谢谢我没有意识到区别。