在Clojure中相互引用deftypes

ama*_*loy 6 clojure deftype

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

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

编辑:这有效,但它仍然很严重.

小智 5

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