2024 Clojure状态调查!中分享你的看法。

欢迎!请访问关于页面,了解更多关于这个功能的详细信息。

0
Clojure

Atom目前被定义为最终值,而ARef.validate()是包私有的。这使得无法定义Atom的子类,如果在调用validate()时有困难。

我建议将Atom的final修饰符移除,使ARef.validate()成为受保护的,并将Atom.state也改为受保护的(目前是包私有的)。

我不确定为什么Atom是final - 这可能是为了性能原因或防止有人对Atom进行奇怪的操作,但我可以看到子类化的一个用例。

一个用例是创建一个反应式Atom,允许跟踪解引用(如在reagent中)。我在Clojure(不是Clojurescript)代码中尝试了这个想法,并因为它是密封的,不得不复制整个Atom类(并将其放置在clojure.lang包中),因为ARef.validate()是包私有的:https://github.com/aaronc/freactive/blob/master/src/java/clojure/lang/ReactiveAtom.java。此外,我还需要将swap!和reset!的定义复制到我的命名空间中。这看起来有点不方便。

2 个答案

0

评论者:hiredman

相关:http://dev.clojure.org/jira/browse/CLJ-803

0
参考:https://clojure.atlassian.net/browse/CLJ-1470(由aaroncr报告)
...