具有Publisher和订阅者特征的Scala类

Bri*_*ian 2 scala publish-subscribe scala-2.8

使用import scala.collection.mutable.{Publisher,Subscriber}我正在尝试实现一个订阅事件和发布事件的类.例如,该类可以接收原始数据,对其进行操作,然后将结果发布给其他订户.

扩展订阅者的基本类:

scala> class Sub[Evt, Pub]() extends Subscriber[Evt, Pub]{
  def notify(pub: Pub, evt: Evt){
  }
}
defined class Sub
Run Code Online (Sandbox Code Playgroud)

扩展Publisher的基本类:

scala> class Pub[Evt]() extends Publisher[Evt]{}
defined class Pub
Run Code Online (Sandbox Code Playgroud)

现在,我想把两者结合起来:

scala> class PubSub[Evt, Pub] extends Subscriber[Evt, Pub] with Publisher[Evt]{
  def notify(pub: Pub, evt: Evt){
  }
}
<console>:26: error: class PubSub needs to be abstract, since method notify in
trait Subscriber of type (pub: Pub,event: Evt)Unit is not defined class 
PubSub[Evt,Pub] extends Subscriber[Evt, Pub] with Publisher[Evt]{
Run Code Online (Sandbox Code Playgroud)

定义了notify方法,因此错误可能会产生误导.

我不确定如何定义PubSub类的类型参数,这可能是问题的一部分.

Itt*_*ayD 5

问题是类Publisher定义了一个类型Pub,它隐藏了通用的Pub参数.

只需将其重命名为其他内容:

class PubSub[Evt, Pub2] extends Subscriber[Evt, Pub2] with Publisher[Evt]{
  def notify(pub: Pub2, evt: Evt){
  }
}
Run Code Online (Sandbox Code Playgroud)