我有一個java.util.HashMap
對象m
(從調用Java代碼的返回值),我想要一個新的地圖,值對。Clojure:在一個慣用的Clojure時尚中使用java.util.HashMap
如果m
是一個Clojure的地圖,我可以使用:
(assoc m "key" "value")
但是,試圖上一個HashMap
給出:
java.lang.ClassCastException:java.util.HashMap中無法施展to clojure.lang.Associative
祝你好運seq
要麼:
(assoc (seq m) "key" "value")
java.lang.ClassCastException:clojure.lang.IteratorSeq不能轉換到clojure.lang.Associative
我設法做到這一點的唯一方法是使用HashMap
自己put
,但返回void
,所以我必須明確地返回m
:
(do (. m put "key" "value") m)
這不是地道的Clojure代碼,加上我MODI與m
搭檔,而不是創建新地圖。
如何以更Clojure的十歲上下的方式HashMap
工作?
我不認爲這是可能的。 Java的HashMap不是一個持久的數據結構,所以要麼修改它,要麼克隆它並修改克隆版本。 – copumpkin 2009-11-03 03:53:40