Недавно я начал изучать Clojure, и у меня есть немного сложности, обертывая мою голову вокруг пространств имен. Как сказал создатель Clojure, новички часто борются за правильную концепцию. Я не понимаю разницы между (use ...)
и (require ...)
. Например, играя в REPL, если я говорю (use 'clojure.contrib.str-utils2)
, я получаю предупреждения о функциях в пространстве имен clojure.core, которые заменяются теми, что содержатся в clojure.contrib.str-utils2, но этого не происходит, когда я использую (require 'clojure.contrib.str-utils2)
. Я не уверен, что я всегда захочу заменить что-то в clojure.core, так что кто-то может указать некоторые рекомендации по импорту внешнего материала и управлению пространствами имен в Clojure?
О, а также, когда следует использовать :use
и :require
? Только внутри (ns ....)
?
Спасибо заранее.