Nehmen wir an, ich muss einen einfachen Zähler machen, und ich will Zähler jedes Mal erhöht werden, wenn ich diese Funktion aufrufen, aber hier ist eine unangenehme Sache: Definierte 'Zähler' ist nicht lokal und ich kann leicht seinen Wert ändern ein weiterer Raum, der die Kapselung bricht.Gibt es irgendeine Methode zur lokalen "Defonce"? (Clojure)
Viele sagen, es wird korrekt sein, wenn ich "private" Meta-Tag platzieren. Die Funktion sieht dann so aus:
(defn next []
(defonce ^:private counter (atom 0))
(println @counter)
(reset! counter (inc @counter)))
Aber ich habe immer noch Zugriff auf 'Counter' aus einem anderen Raum.
Gibt es eine Möglichkeit, diese Kapselung zu implementieren oder nur auf Vereinbarungsebene?
Sind Sie sicher, dass Sie Zugriff auf private Atom von einem anderen ns haben? – mishadoff
@mishadoff [Ja.] (Https://github.com/bbatsov/clojure-style-guide/blob/cb0be3a21c234fbb5bd152e3d67ffbf104140077/README.md#access-private-var) –