2010-11-18 13 views
7

"中間" varを経由せずにメタデータで新しいvarを作成できますか?言い換えればメタデータ付きClojure vars

、私は次の操作を行うことができます知っている:

(def a-var 2) 
(def another-var (with-meta a-var {:foo :bar})) 

が、最初a-varを作成せずにanother-varを作成する方法はありますか?このよう

答えて

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 
6

(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) 
+0

ありがとうございました。私はその違いを認識しませんでした。 – Ralph

+0

良い説明! – Daniel

関連する問題