45 votes

let vs letfn pour définir les fonctions locales dans clojure?

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?

44voto

Rayne Points 14518

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!

24voto

mikera Points 63056

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X