clojure - 在 Clojure 中相互引用 deftypes

标签 clojure deftype

我要实现 transientpersistent!在我的 Clojure deftype 中。据我所知,这意味着有另一个 deftype,TransientMyThing,实现必要的方法。到目前为止还好,但是这两个类需要相互了解才能返回彼此的实例。

我想我可以通过前向声明 Clojure 函数 make-transient 和 make-persistent,然后定义 deftype(通过引用该函数),然后使用现有类型实现这些函数来做到这一点,但对我来说似乎很恶心.有更好的选择吗?

编辑:这有效,但它仍然很糟糕。

最佳答案

在 Clojure 1.3 及更高版本中,一个稍微简单的解决方案是依赖 Clojure 为您的 deftype 创建的构造函数,->transient 和 ->persistent!。由于这些是函数,而不是宏,您可以向前声明它们。然后你可以使用它们,而不是你自己的 make-transient 和 make-persistent,你不必自己实现它们。

关于clojure - 在 Clojure 中相互引用 deftypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6400070/

相关文章:

servlets - 如何定义实现 servlet 接口(interface)的 clojure 类型?

Clojure:难以成功地将协议(protocol)应用于 2 种类型

clojure - 闭包(apply str)的问题?

java - 昂贵算法的 Clojure 性能

clojure - 在 clojure 中使用和别名在 do block 内不起作用

clojure - 如何将 Clojure 程序分发给非程序员?

clojure - 在嵌套函数中设置可变字段 - deftype - clojure

testing - 你如何在 clojure 中使用它自己的命名空间之外的类型?

binding - 使用 Clojure 在运行时动态绑定(bind)函数