実際には、letfnとローカル関数を定義するために使うべきですか? ローカル関数とローカル非関数の両方が必要な場合はどうですか?clojureでローカル関数を定義するためのvs letfnを使用できますか?
35
A
答えて
37
私が必要とするのは、ローカル機能または2 ...または3 ...私はそれらをletfnします。関数と非関数を混在させる必要がある場合は、通常のletを使用します。 letfningとlettingはこれを行うための非常に冗長な方法です。
ただし、ローカル関数を使って相互再帰が必要な場合は、どちらかの方法でletfnを実行する必要があります。
短いバージョン:見た目がよく見えるときや便利なときに使用します。いずれかを使用するための厳密で速い規則はありません。それらはClojureツールボックスの単なるツールです。
楽しくお楽しみください!
18
通常、それはlet
を使いやすくし、すっきりです:あなたは、単一の形で両方の機能と非機能のセットを定義し、さらに以前の定義に戻って参照することができ、そのよう:
(let [f (fn [x] ....)
value (reduce f some-collection)
foo bar]
.....)
letfn
は本当にありますあなたがお互いを再帰的に参照する複数の関数を定義したいときにのみ必要です。 let
は再帰参照をサポートしていないため、この場合は機能しません。
関連する問題
- 1. Clojure組み込み関数の関数定義:def vs defn
- 2. Clojureで引数を検証するために関数またはマクロを使うべきですか?
- 3. リモートでPowerShellのInvoke-Commandを使用するときに、ローカルで定義された関数を含めるにはどうすればよいですか?
- 4. ローカルで使用するためのjquery連鎖関数の書き方は?
- 5. PHPでローカル関数を定義するには?
- 6. グローバル要素定義をローカル要素定義で上書きできますか?
- 7. 角度チャートを使用するときにデータポイントの色を関数で定義できますか? C3ライブラリで
- 8. ユーザ定義関数を持つ辞書を使用できますか?
- 9. Clojureでは、無名関数内で無名関数を定義することは可能ですか?
- 10. Clojureのfnで未定義シンボルを使用するにはどうすればよいですか? Clojureので
- 11. 関数の定義をbashで表示できますか?
- 12. Clojure関数をJava 8のLambdasとして使用できますか?
- 13. validationorルーティングでparameters.iniで定義された変数を使用できますか?
- 14. 関数名前空間の関数を値で定義できますか?
- 15. JavaScriptでvarを使ってローカル変数を再定義する
- 16. Win32 API関数定義は "データベース"/XML形式で使用できますか?
- 17. 関数はC++で使用する前に定義します。
- 18. はVBAで関数エイリアスを定義できますか?
- 19. JEXLスクリプトで関数を定義できますか?
- 20. ユーザー定義のcmp関数を使用したPythonソート関数
- 21. かなり簡単です:うまく定義済みの関数を.each()で使用できますか?
- 22. 未定義の値でright_pad関数を使用するには?
- 23. onclickイベントのRuby関数を定義できますか?
- 24. Clojureで "def"を再定義する
- 25. ユーザー定義関数でパーティションスキーマを使用する
- 26. .NETでSQLユーザー定義関数を使用する方法は?
- 27. プロットコマンドを関数の一部として定義し、カスタム定義関数を使用してプロットすることはできますか?
- 28. F#モジュールでプライベート関数(定義を可能にする)を使用できますか?
- 29. クラスの定義を単純化するために、Scalaの抽象型で 'nesting'を使用できますか?
- 30. Clojureローカル変数
単純な再帰(本体が使用する関数)であっても、letfnが必要であることに注意してください。 – fmjrey
関数はこのようにして自身を参照できます。 '(fn foo [x] ....(foo ...)...)' – mikera
はい、本当に! let形式では、同じfn(letバインディングでは1つの名前、fn形式では1つの名前)または同じ名前を2回繰り返すので、letfnはより良いかもしれません。 – fmjrey