Каков вариант использования * compile-files * в Clojure? - PullRequest
2 голосов
/ 29 марта 2020

Я читаю много кода Clojure и вижу некоторые интересные вещи (по крайней мере, для меня). Вот некоторый код, с которым я столкнулся :

(when-not *compile-files*
  (.addAppender (Logger/getRootLogger) (create-appender)))

Почему / когда вы используете эту динамическую c привязку * файлы компиляции *?

Ответы [ 2 ]

3 голосов
/ 29 марта 2020

Несколько случаев, о которых я могу подумать:

2 голосов
/ 29 марта 2020

Эта привязка установлена ​​с compile. Способ компиляции с Clojure заключается в том, чтобы «запустить» NS для компиляции для его побочных эффектов верхнего уровня в отношении того, куда Clojure помещает вещи (например, ns, defn, def,. ..) и сохраните результаты в виде .class файлов.

Это также означает, что если ваш код содержит «реальные побочные эффекты» на верхнем уровне, они также будут выполняться во время компиляции, что обычно удивляет людей .

Таким образом, если у вас есть «опасные» вещи, которые вы хотите сделать после загрузки ns, вы можете защитить от выполнения во время компиляции, проверив *compile-files*.

Существуют и другие способы «скрыть» вещи от компилятора. Например, обычным вариантом использования является использование delay для def s, которые вызывают побочные эффекты, такие как создание соединения с базой данных.

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