假设我需要制作一个简单的计数器,并且每次调用此函数时都希望计数器增加,但这里有一件不愉快的事情:定义的“计数器”不是本地的,我可以轻松地将其值从另一个空间,打破封装。是否有任何制作本地'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) –