Clojure:将值设置为键

时间:2019-02-14 19:10:11

标签: clojure lisp

也许是,这是一个愚蠢的问题,但它可能对许多新手有所帮助。如何将键值对添加到地图?

我的意思是:

(defn init-item [v item]
  (let [{:keys [id value]} item]
    (-> v
        (assoc :{ID_AS_A_KEY} value))))

我得到:

(init-item {} {:id "123456789" :value [:name "King" :surname "Leonid"]})
user=> {:123456789 [:name "King" :surname "Leonid"]}

2 个答案:

答案 0 :(得分:5)

别这么做。使用字符串本身作为您的地图关键字。没有理由将其设为关键字。如果不理会它,则工作起来要容易得多。

(defn init-item [v item]
  (assoc v (:id item) (:value item)))

答案 1 :(得分:1)

我认为这就是您的意图:

$_SESSION['preostaliOdgovori']

Clojure具有函数 (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"]} namesymbol,可以在字符串和符号/关键字之间进行转换。由于您已经有ID作为字符串,因此只需调用keyword即可将其转换。

请确保始终将浏览器标签打开到The Clojure CheatSheet