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

pic*_*ick 4 clojure

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

(let [hey (println "hey there")] hey)
Run Code Online (Sandbox Code Playgroud)

要么

(let [hey (fn [] (println "hey here"))] (hey))
Run Code Online (Sandbox Code Playgroud)

ove*_*ink 6

第一个版本不会像你想要的那样工作.它在let期间被评估一次,并且hey将被绑定到该值nil.即hey,价值不是一个功能.

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

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

(letfn [(hey1 [] (println "hey1"))] (hey1))
Run Code Online (Sandbox Code Playgroud)

我没有真正的使用规则.我只使用#()读取器宏形式用于非常短的函数,letfn如果我一起定义了一堆内部函数.