据我所知,如果我想定义一个只由一个defprotocol
实现的协议(defrecord
),我仍然需要先定义协议,然后定义{ {1}}实现它:
defrecord
有没有办法将两者结合起来,也许是采用“匿名”协议?
答案 0 :(得分:11)
不要这样做。您的记录实现的“私有”或“匿名”协议只是在具有更好选项的语言中重新构建无意义的OOP版本。定义一个对您的记录进行操作的常规旧函数;没有理由必须将它们贴在身上。
如果您以后想要将其重构为协议......那很容易!客户端将无法区分,因为协议函数调用看起来就像常规函数调用一样。
答案 1 :(得分:4)
是的,这是完全正确的:)
这样做的主要原因是,如果您希望其他人希望以后扩展您的协议。