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

4

我在一个函数内定义另一个函数。以下两种方法,哪一种更好或更受欢迎?

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

或者

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

我猜测你在第一段代码片段中意思是 #(println ...) 而不是 (println ...),对吗? - Alex
1个回答

6
第一个版本不会按照你期望的方式工作。它在 let 期间只计算一次,hey 将被绑定到值 nil,即 hey 的值不会是函数。
第二个版本可以正常工作,易于阅读。其他方法:
(let [hey0 #(println "hey0")] (hey0))

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

我不知道它们的使用有具体规定。当我需要定义很短的函数时,我使用#()读取宏形式;如果我一次性定义了一堆内部函数,我则使用letfn


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接