Может кто-нибудь помочь мне рассказывал мне, как использовать SCALA в ObservableSetчерта?Используйте пример Scala ObservableSet Trait
Большое спасибо заранее
Может кто-нибудь помочь мне рассказывал мне, как использовать SCALA в ObservableSetчерта?Используйте пример Scala ObservableSet Trait
Большое спасибо заранее
Это немного бельмо на глазу со всей информацией для ввода текста, но именно так я смог заставить его работать. Я приветствую предложения о том, как сделать ввод более кратким. различных правок включая псевдонимы типа:
import collection.mutable._
import collection.script._
val set = new HashSet[String] with ObservableSet[String] { }
type Msg = Message[String] with Undoable
type Sub = Subscriber[Msg, ObservableSet[String]]
val sub = new Sub() {
def notify(pub: ObservableSet[String], event: Msg): Unit = {
println("%s sent %s".format(pub, event))
event match {
case r:Remove[_] => println("undo!"); event.undo()
case _ =>
}
}
}
set.subscribe(sub)
set += "foo"
set += "bar"
set -= "bar"
, который печатает:
Set(foo) sent Include(NoLo,foo)
Set(bar, foo) sent Include(NoLo,bar)
Set(foo) sent Remove(NoLo,bar)
undo!
Set(bar, foo) sent Include(NoLo,bar)
Интересно, что отменить вызванные еще одно сообщение будет опубликовано ...
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] = [email protected]
scala> val c = new Counter(1)
c: Counter = [email protected]
scala> c.subscribe(s)
scala> c.inc
got event: updated count to: 2
ObservableSet делает что-то подобное, он вызывает метод публиковать когда элементы добавлены или удалены с + = или + - метод, следующий пример (с классом 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] = [email protected]
scala> set.subscribe(subS)
scala> set += 1
got event: Include(NoLo,1)
res: set.type = Set(1)
Я Beem ленивым, определяя S с типами Любой, но я не мог получить печатать прямо сразу, а не тратить слишком много времени, пытаясь понять его.
Большое спасибо, очень полезно! – barroco