Igo*_*bin 2 functional-programming clojure
谁可以向我解释这个事实:
user> ((partial merge-with +) {:a 1} {:a 2})
{:a 3}
user> (apply (partial merge-with +) ({:a 1} {:a 2}))
nil
Run Code Online (Sandbox Code Playgroud)
为什么我要nil
进入第二种情况?第二行出了什么问题?
表达方式
({:a 1} {:a 2})
Run Code Online (Sandbox Code Playgroud)
评估为nil
.Clojure中的映射是一个函数,它接受一个键并返回相应的值.表达方式
(let [f {:a 1}]
(f {:a 2}))
Run Code Online (Sandbox Code Playgroud)
这相当于({:a 1} {:a 2})
尝试在地图中查找键 {:a 2}
,因为地图 {:a 1}
中没有这样的键nil
被返回.
回到原来的问题,你所要做的就是将列表更改({:a 1} {:a 2})
为向量[{:a 1} {:a 2}]
,它将按预期工作.另请注意,partial
在这种特殊情况下,您不需要(apply merge-with + [{:a 1} {:a 3}])
工作得很好.