【发布时间】:2013-07-24 10:28:03
【问题描述】:
G'day 大师,
我编写了一些利用访问者模式的 Java 库的代码。我想要将访问者的所有杂乱细节隐藏在一个 Clojure 函数后面,该函数接受输入参数并返回一个简单的数据结构,其中包含访问者派生的所有状态。
诀窍是在 Java 端有多个“visitXXX”回调,并且没有简单的方法可以从它们返回状态(Java,作为 Java,假设由各种访问者建立的任何状态都存储在实例变量)。
我所做的(看起来效果很好,fwiw)是在 let 块中定义一个原子,并让我的每个访问者函数交换!当它们被 Java 访问代码调用时,具有更新值的原子。然后,在 Java 访问者完成后,我将取消引用的原子返回到主“驱动程序”函数的末尾。
我的问题是:这是对原子的适当用法吗?如果没有,有没有更惯用的方法来做到这一点?
如果有人感兴趣,有问题的代码是here。
免责声明:我仍然是 Clojure n00b,因此代码对于更有眼光的人来说可能是可怕的。欢迎评论/反馈/批评!
提前致谢!
【问题讨论】:
-
抱歉,您能否提供更多关于您的问题的详细信息?如果您可以发布一些代码 sn-ps 并解释他们在做什么,那就太好了。例如。 “这个函数可以做到这一点,在这里我有一个 let close 中的原子。“原子在这里和这里这样使用......”。因为不容易理解你的问题的上下文。
-
抱歉,我在原始帖子中包含的链接不明显 - 这里是明确的:github.com/pmonks/depends/blob/master/src/depends/…
标签: clojure