В Clojure 1.4 что такое использование refer within require?
какое преимущество дает использование :refer
на :require
есть более чем через :only
на :use
? Являются ли следующие синонимы?
(ns so.example (:use [my.lib :only [function]]))
и
(ns so.example (:require [my.lib :refer [function]]))
3 ответа:
основная идея добавления
:refer
до:require
это полностью избавиться от:use
, оставляя только один оператор для загрузки других пакетов. Вы можете эмулировать существующие:use
С(:require [my.lib :refer :all])
...
да, они эквивалентны,
:refer
и:require
основные операции, необходимые для построения пространства имен.:use
более convienient
: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 изменений: "требуют теперь можете взять :см. Вариант. : refer принимает список символов для ссылки из пространства имен или: all для ввода всех общедоступных vars." (от https://8thlight.com/blog/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html)