Disons que je dois faire un simple compteur et que je veux que le compteur soit incrémenté chaque fois que j'appelle cette fonction, mais voici une chose désagréable: le 'counter' défini n'est pas local et je peux facilement changer sa valeur un autre espace, qui casse l'encapsulation.Existe-t-il une méthode de définition locale? (Clojure)
(defn next []
(defonce counter (atom 0))
(println @counter)
(reset! counter (inc @counter)))
Beaucoup disent, il sera correct si je place une balise META 'privée'. Donc, la fonction ressemblera à ceci:
(defn next []
(defonce ^:private counter (atom 0))
(println @counter)
(reset! counter (inc @counter)))
Mais j'ai toujours accès à 'compteur' d'un autre espace.
Existe-t-il un moyen d'implémenter cette encapsulation ou seulement au niveau de l'accord?
Êtes-vous sûr d'avoir accès à un atome privé d'un autre ns? – mishadoff
@mishadoff [Oui.] (Https://github.com/bbatsov/clojure-style-guide/blob/cb0be3a21c234fbb5bd152e3d67ffbf104140077/README.md#access-private-var) –