Идиоматично включать внешние функции с require
и refer
. Вы избегаете конфликтов пространства имен, вы включаете только те функции, которые вы фактически используете / нуждаетесь, и вы явно объявляете местоположение каждой функции:
(ns project.core
(:require [ring.middleware.reload :refer [wrap-reload]]))
Мне не нужно вызывать эту функцию, добавив к ней префикс пространства имен:
(wrap-reload) ; works
Если вы не используете refer
, вам нужно добавить префикс к пространству имен:
(ring.middleware.reload/wrap-reload) ; works if you don't use refer in your require
Если вы выберете use
, вместо этого (в значительной степени) всегда используйте only
:
(ns project.core
(:use [ring.middleware.reload :only [wrap-reload]]))
В противном случае вы включаете все, что делает излишне большую операцию и очень запутанным для других программистов, чтобы найти, где живут функции.
Кроме того, я настоятельно рекомендую этот блог в качестве ресурса для получения дополнительной информации о пространствах имен Clojure.