Quand en pratique devrais-je utiliser letfn vs let pour définir les fonctions locales? Qu'en est-il des cas où je veux à la fois des fonctions locales et des non-fonctions locales?
Réponses
Trop de publicités?Si tout ce que je besoin est une fonction locale ou 2... ou 3... je vais letfn eux. Si j'ai besoin de laisser un mélange de fonctions et non des fonctions, je vais juste utiliser une normale laisser. letfning et en laissant serait une très verbeux pour ce faire.
Toutefois, si vous avez besoin de la récursivité mutuelle par le biais de votre local fonctions, vous aurez à letfn eux de toute façon.
Version courte: de les Utiliser quand vous pensez qu'il est mieux, et quand c'est pratique. Il n'y a pas de règles strictes à l'utilisation. Ils sont simplement des outils dans le Clojure boîte à outils.
Amusez-vous!
Normalement, il est plus facile et plus propre d'utiliser let
: de cette façon, vous pouvez définir un ensemble de fonctions et de non-fonctions dans une seule forme, et même vous référer aux définitions précédentes:
(let [f (fn [x] ....)
value (reduce f some-collection)
foo bar]
.....)
letfn
n'est vraiment nécessaire que lorsque vous souhaitez définir plusieurs fonctions qui se réfèrent récursivement les unes aux autres. let
ne fonctionnera pas dans ce cas car il ne prend pas en charge les références récursives.