2011-04-20 124 views
2

使用import scala.collection.mutable。{发布商,订阅服务器}我试图实现一个订阅事件和发布事件的类。例如,这个类可以接收原始数据,对其进行操作,然后将结果发布给其他订阅者。斯卡拉类与发布服务器和用户特征

扩展的一个基本类用户:

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

延伸出版商的基本类:

scala> class Pub[Evt]() extends Publisher[Evt]{} 
defined class Pub 

现在,我想结合两个:

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]{ 

的通知方法的定义也许错误是误导。

我不知道如何定义可能是问题一部分的PubSub类的类型参数。

回答

5

问题是类发布者定义了一个类型Pub,它影响了泛型Pub参数。

只要将其重命名为别的东西:

class PubSub[Evt, Pub2] extends Subscriber[Evt, Pub2] with Publisher[Evt]{ 
    def notify(pub: Pub2, evt: Evt){ 
    } 
} 
2

你应该看一看纸Deprecating the Observer Pattern我相信。描述的scala.react包没有作为标准发行版的一部分发布,但作者的homepage上提供了一些快照。如果你现在不打算在生产系统中使用它,这个项目可以提供足够的操场。