结合Clojure defprotocol和defrecord

时间:2011-07-08 15:50:22

标签: clojure protocols

据我所知,如果我想定义一个只由一个defprotocol实现的协议(defrecord),我仍然需要先定义协议,然后定义{ {1}}实现它:

defrecord

有没有办法将两者结合起来,也许是采用“匿名”协议?

2 个答案:

答案 0 :(得分:11)

不要这样做。您的记录实现的“私有”或“匿名”协议只是在具有更好选项的语言中重新构建无意义的OOP版本。定义一个对您的记录进行操作的常规旧函数;没有理由必须将它们贴在身上。

如果您以后想要将其重构为协议......那很容易!客户端将无法区分,因为协议函数调用看起来就像常规函数调用一样。

答案 1 :(得分:4)

是的,这是完全正确的:)

这样做的主要原因是,如果您希望其他人希望以后扩展您的协议。