【问题标题】:In Clojure how can I make my own deftype refable?在 Clojure 中,如何使我自己的 deftype 可引用?
【发布时间】:2011-01-03 20:03:27
【问题描述】:

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

(def a (ref (MyType.)))

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

【问题讨论】:

    标签: clojure


    【解决方案1】:

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

    您可以像任何其他 hashmap 一样将您的记录放在 ref 中。看不到这里的问题。

    【讨论】:

    • 我想要哈希表没有的额外功能,因为只要将东西添加到 ref 中,就想要持久保存到外部数据存储中
    • 祖拜尔,你有没有考虑过为此使用代理?
    • 接缝好像我不太明白这个问题,我认为这对邮件列表有好处。
    【解决方案2】:

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

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

    【讨论】:

    • 我修改了问题。抱歉,我的意思是 (MyType.)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多