假設我需要製作一個簡單的計數器,並且每次調用此函數時都希望計數器增加,但這裏有一件不愉快的事情:定義的「計數器」不是本地的,我可以輕鬆地將其值從另一個空間,打破封裝。是否有任何製作本地'defonce'的方法? (Clojure)
(defn next []
(defonce counter (atom 0))
(println @counter)
(reset! counter (inc @counter)))
很多人說,如果我放置'私人'中繼標記將是正確的。所以功能如下:
(defn next []
(defonce ^:private counter (atom 0))
(println @counter)
(reset! counter (inc @counter)))
但我仍然可以從另一空間訪問'counter'。
有什麼辦法來實現這種封裝,或者它只在協議級別?
您確定您可以訪問另一個ns的私有原子嗎? – mishadoff
@mishadoff [是。](https://github.com/bbatsov/clojure-style-guide/blob/cb0be3a21c234fbb5bd152e3d67ffbf104140077/README.md#access-private-var) –