Clojure: работа с java.util.HashMap идиоматическим способом Clojure
у меня естьjava.util.HashMap
объектm
(возвращаемое значение от вызова к коду Java) и я 'Я хотел бы получить новую карту с дополнительной парой ключ-значение.
Еслиm
были карты Clojure, я мог бы использовать:
(assoc m "key" "value")
Но пытаясь это наHashMap
дает:
java.lang.ClassCastException: java.util.HashMap не может быть приведен к 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, плюс ям модификацииm
вместо создания новой карты.
Как работать сHashMap
в более Clojure-иш-образе?