online - En Clojure 1.4, ¿cuál es el uso de referirse a require?
clojure web framework (3)
¿Qué ventaja tiene usar :refer
a :require
tener más que usar :only
en :use
? ¿Son los siguientes sinónimos?
(ns so.example (:use [my.lib :only [function]]))
y
(ns so.example (:require [my.lib :refer [function]]))
A partir de la versión 1.4.0, ya no hay una buena razón para usar el uso. Use require: consulte en su lugar. Desde el registro de cambios de Clojure 1.4.0: "require ahora puede tomar una opción: referir.: Refer. Toma una lista de símbolos para referirse desde el espacio de nombres o: all para traer todos los vars públicos". (de https://8thlight.com/blog/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html )
La idea principal de agregar :refer
:require
es deshacerse completamente de :use
, dejando solo un operador para cargar otros paquetes. Puede emular existente :use
con (:require [my.lib :refer :all])
...
sí, son equivalentes,
:refer
y :require
son las operaciones básicas requeridas para construir espacios de nombres. :use
es más conveniente
-
:require
causa que las clases se carguen -
:refer
agrega cosas al espacio de nombre que en realidad es solo un mapa (en realidad, un par de mapas) -
:use
es:refer
+:require
tanto como parece, realmente no hay magia en los espacios de nombres
si haces un espacio de nombres como este
(ns so.example (:use my.lib))
el equivalente con: require sería:
(ns so.example (:require [my.lib :refer [function1 function2 function3
list every function in example
here and remember to keep it
up to date ]]))