7
是否有可能創建一個新的變量與元數據沒有通過「中間」var?Clojure vars與元數據
換句話說,我知道我能做到以下幾點:
(def a-var 2)
(def another-var (with-meta a-var {:foo :bar}))
,但有什麼辦法,而無需創建a-var
首先創建another-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
擁有一個整數,所以我不希望你的例子能夠工作,因爲整數不能保存元數據。
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 2010-11-18 11:48:32
很好的解釋! – Daniel 2013-10-25 20:24:31