使用Scala ObservableSet Trait的示例

bar*_*oco 4 collections scala set observablecollection scala-2.8

谁能帮我告诉我如何使用scala的ObservableSet 特性

非常感谢你提前

Arj*_*ijl 8

ObservableSet是从Publisher特征扩展的特征,提供一些基本的发布订阅行为.使用它的一个简单示例是:

scala> class Counter(var count: Int) extends Publisher[String] {
          def inc(): Unit = {
              count += 1
              super.publish("updated count to: " + count)
          }
     }

scala> class S[Evt, Pub] extends Subscriber[Evt, Pub] {
         def notify(pub: Pub, event: Evt): Unit = println("got event: " + event)
      }
defined class S

scala> val s = new S[String, Counter#Pub]     
s: S[String,Counter#Pub] = S@7c27a30c

scala> val c = new Counter(1)
c: Counter = Counter@44ba70c

scala> c.subscribe(s)

scala> c.inc
got event: updated count to: 2
Run Code Online (Sandbox Code Playgroud)

ObservableSet执行类似的操作,它在使用+ =或+ - 方法添加或删除元素时调用publish方法,请参阅以下示例(如上所述定义类S):

scala> class MySet extends HashSet[Int] with ObservableSet[Int] {       
     override def +=(elem: Int): this.type = super.+=(elem);
     override def -=(elem: Int): this.type = super.-=(elem);
     override def clear: Unit = super.clear;      
}

defined class MySet

scala> val set = new MySet
set: MySet = Set()

scala> val subS = new S[Any, Any]
subCol: S[Any,Any] = S@3e898802

scala> set.subscribe(subS)

scala> set += 1
got event: Include(NoLo,1)
res: set.type = Set(1)
Run Code Online (Sandbox Code Playgroud)

我通过使用Any类型定义S而懒得,但我无法立即获得正确的输入,并且没有花太多时间试图解决它.