【发布时间】:2023-03-21 01:08:01
【问题描述】:
假设我需要制作一个简单的计数器,并且我希望每次调用此函数时计数器都会递增,但有一件令人不快的事情:定义的“计数器”不是本地的,我可以轻松地从另一个空间更改它的值,这会破坏封装。
(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)))
但我仍然可以从另一个空间访问“计数器”。
有什么方法可以实现这种封装还是仅在协议级别?
【问题讨论】:
-
你确定你可以从另一个 ns 访问私有 atom 吗?
-
@mishadoff Yes.
标签: clojure counter local private encapsulation