Как я могу получить "def", чтобы не перезагружаться в clojure? - PullRequest
6 голосов
/ 05 января 2011

У меня есть def в пространстве имен, который я хочу инициализировать один раз при запуске приложения, но каждый раз, когда пространство имен, содержащее «def», «используется» и: перезагружается из другого пространства имен, тогда «def» переоценивается , Как я могу предотвратить повторную оценку "def" во время этой перезагрузки?

Ответы [ 2 ]

14 голосов
/ 05 января 2011

defonce приблизит вас, хотя он все равно будет определен снова, если пространство имен: reloaded, потому что (use 'my.namespace :reload) сначала выбрасывает старую корневую привязку.

Defonce - это макрос, который проверяет, имеет ли var уже корневую привязку в данном пространстве имен, а затем определяет его, только если его нет. Вы можете использовать это, чтобы решить вашу проблему, поместив этот специальный def в свое собственное пространство имен с (in-ns ... ), чтобы защитить его от стирания при перезагрузке. тогда вы можете перезагрузить «основное» пространство имен так часто, как вы хотите, и код должен быть определен только один раз.

1 голос
/ 05 января 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...