当前位置 : 主页 > 大数据 > 区块链 >

结合Clojure defprotocol和defrecord

来源:互联网 收集:自由互联 发布时间:2021-06-22
据我所知,如果我想定义一个只能由一个defrecord实现的协议(defprotocol),我仍然必须首先定义协议,然后定义实现它的defrecord: (defprotocol AProtocol (a-method [this]) (b-method [this that]))(defrecord ARec
据我所知,如果我想定义一个只能由一个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] ...))

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

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

如果你以后想要将它重构成一个协议……它很容易!客户端将无法区分,因为协议函数调用看起来就像常规函数调用.

网友评论