Я думаю, это то, что вы хотели сделать:
(defn init-item
[dest-map item]
(let [item-id-str (:id item)
item-val (:value item)
item-id-kw (keyword item-id-str)]
(assoc dest-map item-id-kw item-val)))
(let [all-items {:a 1 :b 2 :c 3}
item-1 {:id "123456789"
:value [:name "King" :surname "Leonid"]}]
(init-item all-items item-1)
;=> {:a 1, :b 2, :c 3, :123456789 [:name "King" :surname "Leonid"]}
Clojure имеет функции name
, symbol
и keyword
для преобразования между строками и символами / ключевыми словами.Поскольку у вас уже есть идентификатор в виде строки, вам просто нужно вызвать keyword
для его преобразования.
Обязательно всегда оставляйте вкладку браузера открытой для Clojure CheatSheet .