如何通过协议实现接口?

时间:2016-01-18 10:39:23

标签: clojure clojure-protocol

使用extend-protocol,协议P可以为实现接口I的任何内容提供默认实现。这实质上教导I做新事物。如果我们希望类型或记录提供I的功能,我们仍需要使用I扩展它们。

有没有办法根据I的行为来指定P行为(它的方法)?

实际试图完成什么

我的协议P(类似于流)有(seq [this] [this timeout-value])来提供序列访问。第二个是在流过期时返回一个特殊值。 (结束序列会让人感到困惑。)

P也有(close [this])

我希望扩展P的对象可以在clojure.core/seq中使用(作为Sequable)并实现java.io.Closeable。实现此目的的一种方法是从P中删除这些方法,然后只执行Sequable&类型/记录中的Closeable。但是当有人递给我时P无法确定它是否可以关闭或seq。叫我面向对象,但是P extends I

寻找

  • 这是不可能的(现在)。
  • 可以使用此代码完成...
  • 可以重新设计以达到类似的效果......

如果P seq多个arity是个问题,seq& seq'也会这样做。

0 个答案:

没有答案