在Clojure中相互引用deftypes

时间:2011-06-19 01:51:53

标签: clojure deftype

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

我认为我可以通过前向声明Clojure函数make-transient和make-persistent,然后定义deftype(通过引用该函数),然后使用现有类型实现函数来实现,但它看起来很漂亮对我而言。有更好的选择吗?

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

1 个答案:

答案 0 :(得分:4)

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