我在另一个函数中定义一个函数。以下方法之一是否比其他方法更好或更优选?
(let [hey (println "hey there")] hey)
或
(let [hey (fn [] (println "hey here"))] (hey))
答案 0 :(得分:6)
第一个版本不会像你想要的那样工作。它在let期间进行了一次评估,hey
将绑定到值nil
。即hey
的值不是函数。
第二个很好,很容易阅读。其他方法:
(let [hey0 #(println "hey0")] (hey0))
(letfn [(hey1 [] (println "hey1"))] (hey1))
我不知道他们使用的真正规则。我只将#()
阅读器宏表单用于非常短的函数,如果我一起定义了一堆内部函数,则使用letfn
。