"中間" varを経由せずにメタデータで新しいvarを作成できますか?言い換えればメタデータ付きClojure vars
、私は次の操作を行うことができます知っている:
(def a-var 2)
(def another-var (with-meta a-var {:foo :bar}))
が、最初a-var
を作成せずにanother-var
を作成する方法はありますか?このよう
"中間" varを経由せずにメタデータで新しいvarを作成できますか?言い換えればメタデータ付きClojure vars
、私は次の操作を行うことができます知っている:
(def a-var 2)
(def another-var (with-meta a-var {:foo :bar}))
が、最初a-var
を作成せずにanother-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
も(def another-var (with-meta a-var {:foo :bar}))
がヴァールに、しかし値にメタデータを添付していないことに、注意してください。そして、あなたの例ではa-var
が整数を保持しているので、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)
ありがとうございました。私はその違いを認識しませんでした。 – Ralph
良い説明! – Daniel