在Clojure中,我如何才能使自己的deftype可以改装?

时间:2011-01-03 20:03:27

标签: clojure

我希望制作一个实现Clojure Hashmaps的clojure deftype。我意识到我可以实现Clojure接口来使我的deftype Hashable和Sequable,但我需要包括什么才能使我的deftype与Clojure STM一起玩得很好,以便我能做到:

(def a (ref (MyType.)))

然后以STM安全方式执行诸如conj和cons之类的dosync操作?

2 个答案:

答案 0 :(得分:2)

您的问题已经通过记录解决,它们是您描述的类型/类,但具有Hashable和Sequable等接口(

)。

你可以把你的记录放在ref中,就像任何其他的hashmap一样。这里没有看到问题。

答案 1 :(得分:1)

(def a (ref MyType))没有多大意义,因为您将课程MyType放在参考中。

您放入ref的类型理想情况下应该是不可变类型,因为dosync的主体应该没有副作用。