在Clojure中为自定义Java类、映射和序列扩展协议

5

我在Clojure 1.2中创建了一个协议,用于处理我的Java类,并为通用的java.lang.Object提供默认处理。代码大致如下:

(extend-protocol PMyProtocol
  my.java.ClassName
    (protocol-function [c]
      "My Java class result")

  java.lang.Object
    (protocol-function [c]
      "Default object result"))

我该如何扩展它,以便对标准的Clojure数据结构(特别是maps、vectors和sequences)进行特殊处理?

1个回答

4

所有Clojure的持久化数据结构都实现了扩展clojure.lang.PersistentCollection的接口。Clojure的瞬态集合实现了clojure.lang.TransientCollection。您可以像扩展类一样将协议扩展到这些集合上(尽管仅处理持久化集合可能更有意义)。


2
为了在需要不同处理的情况下明确命名它们:c.l.IPersistentMapc.l.IPersistentVectorc.l.IPersistentSet(其中有一些系统...),以及对于序列 c.l.ISeq - kotarak
谢谢Michal和kotarak!我最终使用了clojure.lang.IPersistentMap和clojure.lang.ISeq,它们运行得很好。 - mikera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接