让vs letfn在clojure中定义局部函数?

时间:2009-07-29 00:48:21

标签: clojure

在实践中,我应该使用letfn与let来定义本地函数吗? 那些我想要本地函数和本地非函数的情况呢?

2 个答案:

答案 0 :(得分:41)

如果我需要的只是一个本地功能或2 ...或3 ...我会让他们。如果我需要混合使用函数和非函数,我将使用正常的let。 letfning和letting将是一个非常冗长的方式来做到这一点。

但是,如果您需要通过本地函数进行相互递归,则必须以任何方式使用它们。

简短版本:当您认为它看起来更好,并且方便时使用它们。使用任何一种都没有严格的规则。它们只是Clojure工具箱中的工具。

玩得开心!

答案 1 :(得分:21)

通常使用let更简单,更简洁:这样你就可以在一个表单中定义一组函数和非函数,甚至可以参考之前的定义:

(let [f     (fn [x] ....)
      value (reduce f some-collection)
      foo   bar]
  .....)
当你想要定义递归引用彼此的多个函数时,实际上只需要{p> letfnlet在这种情况下不起作用,因为它不支持递归引用。