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

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)