首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合Clojure defprotocol和defrecord

组合Clojure defprotocol和defrecord
EN

Stack Overflow用户
提问于 2011-07-08 23:50:22
回答 2查看 3.6K关注 0票数 6

据我所知,如果我想定义一个只由一个defrecord实现的协议(defprotocol),我仍然必须首先定义该协议,然后定义实现它的defrecord

代码语言:javascript
复制
(defprotocol AProtocol
  (a-method [this])
  (b-method [this that]))

(defrecord ARecord [a-field b-field]
  AProtocol
  (a-method [this] ...)
  (b-method [this that] ...))

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-09 02:02:44

不要这样做。您的记录实现的“私有”或“匿名”协议只是在一种具有更好选项的语言中重新发明了一个无意义的OOP版本。定义一个在您的记录上操作的常规旧函数;没有理由必须将它物理地附加到它们上。

如果你以后想把它重构成一个协议,这很简单!客户端将无法区分,因为协议函数调用看起来就像是常规函数调用。

票数 13
EN

Stack Overflow用户

发布于 2011-07-09 00:44:22

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6627020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档