Какое преимущество имеет использование :refer
в :require
с использованием :only
в :use
? Являются ли следующие синонимы?
(ns so.example (:use [my.lib :only [function]]))
и
(ns so.example (:require [my.lib :refer [function]]))
Какое преимущество имеет использование :refer
в :require
с использованием :only
в :use
? Являются ли следующие синонимы?
(ns so.example (:use [my.lib :only [function]]))
и
(ns so.example (:require [my.lib :refer [function]]))
Основная идея добавления :refer
в :require
состоит в том, чтобы полностью избавиться от :use
, оставив только один оператор для загрузки других пакетов. Вы можете эмулировать существующие :use
с помощью (:require [my.lib :refer :all])
...
да, они эквивалентны,
: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 ]]))
Начиная с версии 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)