Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如果密钥存在:更新,否则:关联_Clojure_Clojurescript - Fatal编程技术网

Clojure 如果密钥存在:更新,否则:关联

Clojure 如果密钥存在:更新,否则:关联,clojure,clojurescript,Clojure,Clojurescript,在reduce循环中考虑这一点: (if (contains? m k) (update m k conj v) (assoc m k [v])) 有没有办法摆脱if语句?当映射中不存在k时,使用fnil处理v的nil值: (update m k (fnil conj []) v) 虽然fnil的答案更为精彩,但我发现以下内容更容易阅读,尤其是在不熟悉fnil的情况下: (assoc m k (conj (m k []) v)) 其中(m k[])返回m中k的值,或者如果m中不存在

在reduce循环中考虑这一点:

(if (contains? m k)
  (update m k conj v)
  (assoc m k [v]))

有没有办法摆脱if语句?

当映射中不存在
k
时,使用
fnil
处理
v
的nil值:

(update m k (fnil conj []) v)

虽然
fnil
的答案更为精彩,但我发现以下内容更容易阅读,尤其是在不熟悉
fnil
的情况下:

(assoc m k (conj (m k []) v))
其中
(m k[])
返回
m
k
的值,或者如果
m
中不存在
k
,则默认为
[]


如果
k
是一个符号,那么
(km[])
也会起作用。

我花了一些时间去理解它,但是是的!明白了,回答得很好!沙扎姆,回答得好!