我是Clojure的新手,正试图了解为什么以下两个功能不同。
第一
(defn rp [i]
((println i)
(if (> i 3)
(println "bye")
(rp (inc i)))))
第二
(defn rp
([i] (println i)
(if (> i 3)
(println "bye")
(rp (inc i)))))
当我用(rp 0)
打电话给他们时,第一张会打印
0
1
2
3
4
bye
CompilerException java.lang.NullPointerException, compiling:(/Users/...)
和第二打印
0
1
2
3
4
bye
=> nil
为什么它们不同?为什么 first 函数会触发NullPointerException
?
答案 0 :(得分:2)
您的第一个示例在身体周围有括号,并调用(println i)
(即nil
)的结果作为函数。例如。 ((println :a) :b)
引发。在第二个示例中,最有可能与您对不同Arities的实验有关。