【问题标题】:Extending protocols for custom Java classes, maps and sequences in Clojure在 Clojure 中为自定义 Java 类、映射和序列扩展协议
【发布时间】:2010-08-02 14:42:09
【问题描述】:

我在 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 数据结构(特别是映射、向量和序列)进行特殊处理?

【问题讨论】:

    标签: java data-structures clojure protocols


    【解决方案1】:

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

    【讨论】:

    • 明确命名它们以防需要不同的处理:c.l.IPersistentMapc.l.IPersistentVectorc.l.IPersistentSet(那里有一些系统......)和序列c.l.ISeq。跨度>
    • 感谢 Michal 和 kotarak!我最终使用了运行良好的 clojure.lang.IPersistentMap 和 clojure.lang.ISeq。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    相关资源
    最近更新 更多