Clojure将函数与Let关联起来的最佳实践

时间:2014-05-12 16:32:50

标签: clojure

我在另一个函数中定义一个函数。以下方法之一是否比其他方法更好或更优选?

(let [hey (println "hey there")] hey)

(let [hey (fn [] (println "hey here"))] (hey))

1 个答案:

答案 0 :(得分:6)

第一个版本不会像你想要的那样工作。它在let期间进行了一次评估,hey将绑定到值nil。即hey的值不是函数。

第二个很好,很容易阅读。其他方法:

(let [hey0 #(println "hey0")] (hey0))

(letfn [(hey1 [] (println "hey1"))] (hey1))

我不知道他们使用的真正规则。我只将#()阅读器宏表单用于非常短的函数,如果我一起定义了一堆内部函数,则使用letfn