Основная идея добавления :refer в :require состоит в том, чтобы полностью избавиться от :use, оставив только один оператор для загрузки других пакетов. Вы можете эмулировать существующие :use с помощью (:require [my.lib :refer :all])...
Ответ 2
да, они эквивалентны,
:refer и :require - это основные операции, необходимые для создания пространств имен. :use более убедительна
:require заставляет классы загружаться
:refer добавляет вещи в пространство имен, которое на самом деле представляет собой только карту (на самом деле пару карт).
:use - :refer + :require
насколько это может показаться, действительно нет волшебства для пространств имен
если вы создадите пространство имен, подобное этому
(ns so.example (:use my.lib))
эквивалент с: require должен быть:
(ns so.example (:require [my.lib :refer [function1 function2 function3
list every function in example
here and remember to keep it
up to date ]]))
Ответ 3
Начиная с версии 1.4.0, нет более веских оснований для использования. Используйте require: вместо этого используйте. Из списка изменений Clojure 1.4.0: "require теперь может принимать параметр: refer.: Refer принимает список символов для ссылки из пространства имен или: все, чтобы задействовать все общедоступные вары".
(от https://8thlight.com/blog/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html)