据我所知,如果我想定义一个只由一个defrecord实现的协议(defprotocol),我仍然必须首先定义该协议,然后定义实现它的defrecord:
(defprotocol AProtocol
(a-method [this])
(b-method [this that]))
(defrecord ARecord [a-field b-field]
AProtocol
(a-method [this] ...)
(b-method [this that] ...))有没有办法将这两者结合起来,也许是用一个“匿名”协议?
发布于 2011-07-09 02:02:44
不要这样做。您的记录实现的“私有”或“匿名”协议只是在一种具有更好选项的语言中重新发明了一个无意义的OOP版本。定义一个在您的记录上操作的常规旧函数;没有理由必须将它物理地附加到它们上。
如果你以后想把它重构成一个协议,这很简单!客户端将无法区分,因为协议函数调用看起来就像是常规函数调用。
发布于 2011-07-09 00:44:22
是的,这是完全正确的:)
这样做的主要原因是,如果您希望其他人稍后想要扩展您的协议。
https://stackoverflow.com/questions/6627020
复制相似问题