tutorial react google closure clojure clojurescript

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.