react - Defensa privada en clojure/clojurescript
clojurescript tutorial (5)
Aquí es cómo implementar def-
:
(defmacro def-
"same as def, yielding non-public def"
[name & decls]
(list* `def (with-meta name (assoc (meta name) :private true)) decls))
Este código es muy similar al de defn-
, que puede buscar usando (clojure.repl/source defn-)
:
(defmacro defn-
"same as defn, yielding non-public def"
{:added "1.0"}
[name & decls]
(list* `defn (with-meta name (assoc (meta name) :private true)) decls))
En Clojure y clojurescript puede tener una versión privada de defn llamada defn-, pero ¿cómo hace lo mismo para def, ya que def- no parece estar incluido?
Esta post grupo de Google tiene una discusión sobre este tema. Al parecer la solicitud ha sido considerada. Según una de las respuestas, se consideró que defn-
no era una buena idea y decidió no perpetuarla con def
y otros.
Si quieres una definición, aquí tienes cómo implementarla.
(defmacro def- [item value]
`(def ^{:private true} ~item ~value)
)
Vale la pena mencionar que actualmente no es posible tener una def
privada (y una def
) en ClojureScript: https://clojurescript.org/about/differences (en "formularios especiales")
La compilación no fallará y la def
permanecerá accesible.
Debe agregar el par de valores de clave de metadatos :private true
.
(def ^{:private true} some-var :value)
;; or
(def ^:private some-var :value)
La segunda forma es sólo una mano corta para la primera.