使用extend-protocol
,协议P
可以为任何实现接口的东西提供默认实现I
。这实质上是在教导I
人们做新事物。如果我们想要一个类型或记录来提供I
我们仍然需要扩展它们的功能I
。
有没有办法根据 的行为来指定I
行为(它的方法)P
?
我实际上想要完成什么
我的协议P
(就像一个流)必须(seq [this] [this timeout-value])
提供序列访问。第二个参数是在流过期时返回一个特殊值。(结束序列会有混乱。)
P
也有(close [this])
。
我希望扩展P
的对象可以在clojure.core/seq
(作为 a Sequable
)中使用并且还可以实现java.io.Closeable
. 实现此目的的一种方法是从类型/记录中删除这些方法并仅在类型/记录中P
实现Sequable
& 。Closeable
但是当有人递给我时,我P
不确定它是否可以关闭或seq
编辑。叫我面向对象,但是P extends I
.
寻找
- 这是不可能的(目前)。
- 可以使用此代码完成...
- 它可以重新设计以达到类似的效果......
如果P
'seq
是多重性是一个问题,seq
&seq'
也会这样做。