В 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)