私はjava.util.HashMap
オブジェクトm
(Javaコードの呼び出しからの戻り値)を持っています。値のペア。Clojure:慣用的なClojureファッションでjava.util.HashMapを使用する
m
はClojureのマップだったら、私は使用することができます
(assoc m "key" "value")
しかしHashMap
にそれをしようとすることはできます:
とjava.lang.ClassCastException:java.util.HashMapをキャストすることはできませんが
01:seq
のいずれかではありません運
clojure.lang.Associative
へ(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-ishの方法でHashMap
を使用するにはどうすればよいですか?
私はそれが可能ではないと思います。 JavaのHashMapは永続的なデータ構造ではないため、変更するか、複製して複製されたバージョンを変更してください。 – copumpkin