本周我开始学习Clojure。我正在通过有条件的公案工作,并且不理解以下断言:
"Some of them leave you no alternative"
(= [] (if (> 4 3)
[]))
"And in such a situation you may have nothing"
(= nil (if (nil? 0)
[:a :b :c]))
第二个做了我期望的事情 - 条件评估为假 - [编辑:实际上,它是真的,我仍然不习惯'运营商优先'推理!],if
尝试返回第二个替代,找不到,因此返回nil
。那么,为什么不首先返回nil
?是因为一个空的结构“足够接近”nil?
答案 0 :(得分:3)
因为第一个if
计算结果为真(因为4确实大于3)所以else子句是无关紧要的。它返回then子句,该子句定义为等于[]
。