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

欢迎!请参阅关于页面了解更多关于这个网站的工作方式的信息。

0
Clojure

Atom目前被定义为final,而ARef.validate()是包私有的。这使得定义Atom的子类变得不可能,并且使ARef子类化变得困难(如果需要调用validate())。

我建议移除Atom的final修饰符,使ARef.validate()变为protected,并将Atom.state也变为protected(它现在是包私有)。

我不确定为什么Atom是final的原因是否具体——这可能是因为性能原因或防止有人对Atom做奇怪的事情,但我可以看到对它进行子类化的用例。

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

2 答案

0

评论者:hiredman

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

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