Mam obiekt java.util.HashMap
(wartość zwracana z wywołania kodu Java) i chcę uzyskać nową mapę z dodatkowym para wartości.Clojure: praca z java.util.HashMap w idiomatycznym stylu Clojure
Jeśli m
były map Clojure, mogę użyć:
(assoc m "key" "value")
Ale próbując że na HashMap
daje:
java.lang.ClassCastException: java.util.HashMap nie mogą być oddane do clojure.lang.Associative
Brak powodzenia seq
albo:
(assoc (seq m) "key" "value")
java.lang.ClassCastException: clojure.lang.IteratorSeq nie mogą być oddane do clojure.lang.Associative
Jedynym sposobem udało mi się zrobić go było używać HashMap
„s własny put
, ale zwraca void
więc muszę wyraźnie powrócić m
:
(do (. m put "key" "value") m)
to nie jest idiomatyczne kod Clojure, plus jestem Modi podważając numer m
zamiast tworzyć nową mapę.
Jak pracować z HashMap
w bardziej Clojure-owski sposób?
Nie sądzę, że to możliwe. Java HashMap nie jest trwałą strukturą danych, więc albo ją modyfikujecie, albo klonujecie i modyfikujecie sklonowaną wersję. – copumpkin