2011-01-04 16 views
6

Tengo una def en un espacio de nombres que quiero inicializar una vez cuando se inicia la aplicación, pero cada vez que el espacio de nombres que contiene la "def" es "usado" y: recargados de otro espacio de nombres, la "def" se vuelve a evaluar. ¿Cómo puedo evitar que la "def" se vuelva a evadir durante esta recarga?¿Cómo puedo obtener una "def" para no volver a cargar en clojure?

Respuesta

13

defonce le acercarán a pesar de que todavía se definirá de nuevo si el espacio de nombres es: recargado porque (use 'my.namespace :reload) primera tiros de la vieja unión de raíz.

Defonce es una macro que comprueba si la var ya tiene un enlace de raíz en el espacio de nombres dado y luego solo lo define si no lo hace. Puede usar esto para resolver su problema colocando esta definición especial en su propio espacio de nombres con un (in-ns ...) para evitar que se borre al volver a cargar. a continuación, puede volver a cargar el espacio de nombres 'principal' tantas veces como desee y el código solo se debe definir una vez.

+0

hey, ¿ha cambiado este comportamiento desde esta respuesta? Traté de agregar una (definición x 5) a un espacio de nombres, comencé una réplica, x es 5, luego lo cambié en la fuente, intenté (requiero: recargar 'prueba) y (uso: recargar' prueba) y aun así x sigue siendo 5 – Hendekagon

Cuestiones relacionadas