2009-07-29 39 views

回答

37

如果我只需要一個本地函數或2 ...或3 ...我會讓他們。如果我需要混合使用函數和非函數,那麼我只會使用正常的let。 letfning和letting將是一個非常詳細的方式來做到這一點。

但是,如果您需要通過本地功能進行相互遞歸,則必須以任何方式讓它們通過。

簡版:當你認爲它看起來更好,並且方便時使用它們。沒有使用任何硬性規則和快速規則。它們只是Clojure工具箱中的工具。

玩得開心!

18

通常更容易和更整潔使用let:這樣你可以在一個單一的形式定義了一組函數和非功能,甚至重提以前的定義:

(let [f  (fn [x] ....) 
     value (reduce f some-collection) 
     foo bar] 
    .....) 

letfn是真的只有當你想定義多個遞歸引用的函數時才需要。 let在這種情況下不起作用,因爲它不支持遞歸引用。

+0

請注意,即使對於簡單的遞歸(一個函數本身使用它自己),letfn也是必需的。 – fmjrey 2014-05-30 12:55:18