我正在做一个特殊情况,这是一个问题。
(true? (__ :a {:a nil :b 2}))
答案是:
#(nil?(%2 %1 0))
但我无法得到它。 %2%1 0在这做什么? 特别是那个0做了什么?
你可以帮我解释一下吗? 感谢答案 0 :(得分:7)
#()格式是定义匿名函数的简写。
例如:#(+ %1 %2)
相当于(fn [a,b] (+ a b))
这里%2
和%1
分别代表函数的第二个和第一个参数。
答案 1 :(得分:2)
如前所述, <{1}}是
的糖 #(nil? (%2 %1 0))
关于这一行的一些注意事项:
(fn [a-map a-key] (nil? (a-map a-key 0)))
函数 get
等于(a-map a-key default-value)
(get a-map a-key default-value)
值。例如: nil
生成(get {:b 1} :a)
(因为地图中没有nil
键)
:a
也会生成(get {:a nil :b 1} :a)
(因为nil
的值为nil
)
使用默认值时会消除这种不确定性:
:a
=&gt; 0
(get {:b 1} :a 0)
=&gt;零
(get {:a nil :b 1} :a 0)
但在这种情况下,您可能希望以这种方式完成任务:
:not-found
因为他们显然希望您检查地图中是否存在密钥(true? (#(contains? %2 %1) :a {:a nil :b 2}))