G'day 大师们,
我编写了一些利用访问者模式的 Java 库的代码。我想要将访问者的所有杂乱细节隐藏在一个 Clojure 函数后面,该函数接受输入参数并返回一个包含访问者派生的所有状态的简单数据结构。
诀窍是在 Java 端有多个“visitXXX”回调,并且没有简单的方法可以从它们返回状态(Java,作为 Java,假设由各种访问者建立的任何状态都存储在实例变量中) .
我所做的(并且似乎工作得很好,fwiw)是在 let 块中定义一个原子,并让我的每个访问者函数交换!当它们被 Java 访问代码调用时,具有更新值的原子。然后,在 Java 访问者完成后,我将 deref'ed atom 从主“驱动程序”函数的末尾返回。
我的问题是:这是对原子的适当用法吗?如果没有,是否有更惯用的方法来做到这一点?
如果有人感兴趣,有问题的代码在这里。
免责声明:我仍然是 Clojure n00b,因此代码对于更有眼光的人来说可能是可怕的。欢迎评论/反馈/批评!
提前致谢!