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

Clojure将函数与Let关联的最佳实践,clojure,Clojure,我在另一个函数中定义一个函数。以下方法中的一种比另一种更好,还是更可取 (let [hey (println "hey there")] hey) 或 第一个版本不会按照您可能希望的方式工作。在let期间对其求值一次,hey将绑定到值nil。i、 e.嘿的值不会是函数 第二个很好,而且容易阅读。其他办法: (let [hey0 #(println "hey0")] (hey0)) (letfn [(hey1 [] (println "hey1"))] (hey1)) 据我所知,它们的使用没

我在另一个函数中定义一个函数。以下方法中的一种比另一种更好,还是更可取

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


第一个版本不会按照您可能希望的方式工作。在let期间对其求值一次,
hey
将绑定到值
nil
。i、 e.
的值不会是函数

第二个很好,而且容易阅读。其他办法:

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

(letfn [(hey1 [] (println "hey1"))] (hey1))
据我所知,它们的使用没有真正的规则。我只对非常短的函数使用
#()
读卡器宏形式,如果我一起定义一组内部函数,则使用
letfn

我想你的意思是
#(println…
,而不是第一段中的
(println…
(let [hey0 #(println "hey0")] (hey0))

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