请在 2024 年 Clojure 状态调查! 分享您的想法。

欢迎!有关如何使用本站的信息,请参阅 关于 页面。

+3
Clojure

来自 Java 的您可能会预期 proxy-super 不会有什么危害,但 proxy-super 通过修改代理对象然后在调用 proxy-super 之后恢复它来操作。这可能会导致非常奇怪的行为。如果您有一个调用了 proxy-super 的代理方法 M,那么当 proxy-super 正在运行时,该代理对象上对 M 的所有调用将立即调用 super M 而不是代理的 M。

使 proxy-super 安全(不仅安全多线程,而且在任何相同的调用堆栈中调用时也安全)可能真的很难,但那会很棒。或者,在文档字符串中放一排闪烁的指示灯可能是个好主意。

3 答案

+1

Clojure 的代理实现有点奇怪。Nathan Marz 编写了一个与之竞争的库来提供代理,我已经扩展到支持对超类方法的调用,在核心 Clojure 被修复之前。

存在一些设计问题;我看不到模仿 Java 中对超类调用(仅以受控方式调用)语义的方式来;因为来自任何地方的代理方法可能会调用它。

0

评论由:freekpaans 发表

我在尝试封装队列调用时遇到了这个问题:[链接](https://stackoverflow.com/questions/49862954/clojure-proxy-multithreading-issue)

0
参考:[链接](https://clojure.atlassian.net/browse/CLJ-2201)(由 hiredman 报告)
...