在實踐中,我應該使用letfn與let來定義本地函數嗎? 那些我想要本地功能和本地非功能的情況呢?let vs letfn在clojure中定義本地函數?
35
A
回答
37
如果我只需要一個本地函數或2 ...或3 ...我會讓他們。如果我需要混合使用函數和非函數,那麼我只會使用正常的let。 letfning和letting將是一個非常詳細的方式來做到這一點。
但是,如果您需要通過本地功能進行相互遞歸,則必須以任何方式讓它們通過。
簡版:當你認爲它看起來更好,並且方便時使用它們。沒有使用任何硬性規則和快速規則。它們只是Clojure工具箱中的工具。
玩得開心!
18
通常更容易和更整潔使用let
:這樣你可以在一個單一的形式定義了一組函數和非功能,甚至重提以前的定義:
(let [f (fn [x] ....)
value (reduce f some-collection)
foo bar]
.....)
letfn
是真的只有當你想定義多個遞歸引用的函數時才需要。 let
在這種情況下不起作用,因爲它不支持遞歸引用。
相關問題
- 1. 何時使用Clojure中的let vs if-let
- 2. Clojure中的函數定義
- 3. 本地到`let`對函數的局部
- 4. Clojure的:多let綁定
- 5. C#在LINQ中定義LET
- 6. Clojure內置函數的定義:def vs defn
- 7. Swift - Guard-let vs if-let
- 8. 在Clojure中使用:let修飾符
- 9. 如何在Clojure中的函數中定義函數並引用該函數?
- 10. Lazy Var vs Let
- 11. 定義Clojure中
- 12. 如何在REPL中顯示Clojure中函數的定義?
- 13. 本地函數定義不合法
- 14. Clojure(let [frame(java.awt.Frame。)])在未調用的函數中會導致AWT啓動
- 15. 如何對let body本地創建遞歸函數
- 16. hadoop map reduce vs clojure pmap函數
- 17. 在Clojure中定義函數僅用於測試
- 18. (來源)在Clojure中給REPL定義的函數「未找到」
- 19. 如何在Clojure中取消定義一個函數?
- 20. clojure函數中的「未綁定」變量
- 21. 循環訪問Clojure中的「let」列表?
- 22. 函數純度在Haskell中使用'let'
- 23. 爲什麼在函數中使用* let *?
- 24. 在Swift 2中使用var vs let讓地圖
- 25. clojure中的除數函數
- 26. 如何在PHP中定義本地函數?
- 27. 是否可以在TSQL查詢中定義本地函數?
- 28. Clojure獲取本地允許
- 29. 錯誤C2601:'main':本地函數定義是非法的 - MS VS 2013 Compiler
- 30. 定義數據特定的Clojure函數,可能與宏?
請注意,即使對於簡單的遞歸(一個函數本身使用它自己),letfn也是必需的。 – fmjrey 2014-05-30 12:55:18