【发布时间】:2014-05-11 19:28:20
【问题描述】:
我可能错过了关于协议的全部要点,但我的问题是,协议是否可以用于指示如何迭代自定义数据结构或 println 如何打印对象?
假设一张地图有两个向量,
{:a [] :b []}
当第一次调用它时,我想从 :a 向量中获取,但是当在这个结构上 conj 时我想 conj 到 :b。我可以使用协议来实现这种行为吗?
【问题讨论】:
-
目前还没有,因为几乎没有低级 fn(reduce 除外)被“协议化”,但您可以使用 defrecord 或 deftype 来定义行为如您所愿的数据类型。
-
是的,但是我还必须实现作用于它的函数,创建冗余函数名称,例如 head 作为我的数据结构的第一个,不是吗?
-
如果你使用 deftype,你可以为 Clojure 使用的各种接口(如 clojure.lang.ISeq)提供你想要的实现。
标签: clojure