2009-07-29 8 views

Respuesta

37

Si todo lo que necesito es una función local o 2 ... o 3 ... Voy a dejarlos. Si necesito dejar una combinación de funciones y no funciones, solo usaré un let normal. dejar y dejar sería una manera muy detallada de hacer esto.

Sin embargo, si necesita recursión mutua a través de sus funciones locales, tendrá que dejarlas de cualquier manera.

Versión corta: utilícelas cuando crea que se ve mejor y cuando sea conveniente. No hay reglas duras y rápidas para usar cualquiera. Son solo herramientas en la caja de herramientas Clojure.

¡Diviértete!

18

Normalmente es más fácil y más limpio para usar let: de esa manera se puede definir un conjunto de ambas funciones y que no son funciones en una sola forma, e incluso hacer referencia a las definiciones anteriores:

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

letfn es realmente solo es necesario cuando quiere definir múltiples funciones que se refieren recíprocamente entre sí. let no funcionará en este caso porque no admite referencias recursivas.

+0

Tenga en cuenta que incluso para la recursión simple (una función que el cuerpo usa a sí mismo), se necesita una nota. – fmjrey

+3

Una función puede referirse a sí misma de esta manera: '(fn foo [x] .... (foo ...) ...)' – mikera

+0

¡Sí, de hecho! Aunque en una forma let que significa tener dos nombres para el mismo fn (un nombre en el enlace let, otro en la forma fn) o repetir el mismo nombre dos veces, así letn podría ser mejor. – fmjrey

Cuestiones relacionadas