2011-03-30 12 views
15

He encontrado algunas veces que tengo un grupo de funciones relacionadas entre sí, y cómo las colocaría naturalmente en el archivo termina en conflicto con sus dependencias (es decir, la función 1 depende en la función 2, pero está por encima de la función 1). Cuando estoy escribiendo código, generalmente sigo evaluando expresiones de nivel superior y solo evalúo todo el archivo para actualizar dependencias en refs o whatnot. Estoy descubriendo que con bastante frecuencia, termino con un conflicto de dependencia, y termino teniendo que hacer malabares con un conjunto de funciones.solucionando la falta de "elevación" en clojure

En otros idiomas que conozco, tan pronto como declara una función, se "iza" detrás de la escena como si apareciera antes que cualquier otra cosa. De esta forma, no necesita preocuparse por el orden de las cosas en su código, y puede tratar las funciones como fragmentos de código modulares. Es la falta de esta característica que me sigue mordiendo en clojure. ¿Estoy haciendo algo mal? Es más una pequeña molestia que un gran problema, ¿es algo a lo que te acostumbras a prestar atención?

Respuesta

22

declare resuelve este problema muy bien

declare 
macro 
Usage: (declare & names) 
defs the supplied var names with no bindings, useful for making forward declarations. 
Added in Clojure version 1.0 

puede evitar hacer malabarismos con el fin función añadiendo una instrucción declare al inicio del espacio de nombres

(declare fun1 fun2 fun3) 

(defn fun3 [] (fun1)) 
(defn fun1 [] (fun2)) 
(defn fun2 [] 42) 
+0

dulce, gracias! exactamente lo que estaba buscando –

+0

Todavía un poco asqueroso, ¡pero gracias! –