3

使用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'也会这样做。

4

0 回答 0