Недавно я начал изучать 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 ....)?
Спасибо заранее.