在实践中,我应该使用letfn与let来定义本地函数吗? 那些我想要本地函数和本地非函数的情况呢?
答案 0 :(得分:41)
如果我需要的只是一个本地功能或2 ...或3 ...我会让他们。如果我需要混合使用函数和非函数,我将使用正常的let。 letfning和letting将是一个非常冗长的方式来做到这一点。
但是,如果您需要通过本地函数进行相互递归,则必须以任何方式使用它们。
简短版本:当您认为它看起来更好,并且方便时使用它们。使用任何一种都没有严格的规则。它们只是Clojure工具箱中的工具。
玩得开心!
答案 1 :(得分:21)
通常使用let
更简单,更简洁:这样你就可以在一个表单中定义一组函数和非函数,甚至可以参考之前的定义:
(let [f (fn [x] ....)
value (reduce f some-collection)
foo bar]
.....)
当你想要定义递归引用彼此的多个函数时,实际上只需要{p> letfn
。 let
在这种情况下不起作用,因为它不支持递归引用。