据我所知,如果我想定义一个只能由一个defrecord
实现的协议(defprotocol
),我仍然必须先定义协议,然后定义实现它的defrecord
:将Clojure 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] ...))
有没有办法将两者结合起来,或许与“匿名”协议结合?
有你不想使用普通功能的原因是什么? – Jonas
@Jonas:我可能要在协议重构的'后来defprotocol'让别人记录可以实现它,但是在目前的时间,我不知道。我想我可以随时将普通函数改为协议函数,作为重构的一部分。我也不能在不实现协议的情况下“覆盖”像'count'这样的内置函数,否则我会影响默认绑定。 – Ralph
名为'count'的协议函数也会影响内置。 – amalloy