2011-10-25 69 views
5

我是新來的斯卡拉,我正在尋找發佈 - 訂閱用法。我的Google技能可能存在問題,但似乎找不到這種用法的示例,我可以指定訂閱者應遵守哪些事件。發行商訂閱斯卡拉

任何人都有一些例子嗎?

謝謝!

回答

4

如果你需要的東西很簡單,那麼我建議你做自己的事情,它不應該那麼辛苦。但如果你想要更大的東西,那麼你可以看看Eventbus。它是Java lib,但我也在Scala中使用它。

Scala的一個例子實現在http://jim-mcbeath.blogspot.com/2009/10/simple-publishsubscribe-example-in.html

+0

嗯,我已經看到了吉姆McBeath的教程,但實際上我在尋找的規模出版商特徵的實現(http://www.scala-lang.org/api /2.7.1/scala/collection/mutable/Publisher.html) – user485659

+0

我也沒找到。什麼阻止了你的實現?發佈者只會發佈一種事件。但是如果這個話題引起你的興趣,你可以從Ingo Maier,Tiark Rompf,Martin Odersky看看[Deprecating the Observer Pattern](http://lamp.epfl.ch/~imaier/pub/DeprecatingObserversTR2010.pdf)。 – hellectronic

+0

其實我正在尋找一種方法來監視一個類:只要它的任何方法完成,我想要一些監視器類來捕獲事件並做一些事情。所以我正在尋找一種發佈者類的每種方法在完成時自動發佈的方式。 – user485659

4

描述一個簡單的參考例子可以http://comments.gmane.org/gmane.comp.lang.scala.user/63002發現:

case class MyEvent(number: Int) 

class PrintIt extends Subscriber[MyEvent, Publisher[MyEvent]] { 
    override def notify(pub: Publisher[MyEvent], event: MyEvent): Unit = { 
    println("got an event: " + event) 
    } 
} 

class RunIt extends Publisher[MyEvent] { 
    def pub() = publish(MyEvent(12)) 
} 

object Main extends App { 
    val runIt = new RunIt() 
    runIt.subscribe(new PrintIt) 
    runIt.pub() 
} 
2

你可以在這裏找到一個簡單的EventBus實現。它也做異步事件處理和預定的事件發佈。

https://github.com/hipjim/scala-event-bus

case class Msg(content: String) 
val eb = EventBus() 
eb.subscribe[Msg] { t => 
    println(t.content) 
} 

for (i <- 1 to 100) 
eb.post(Msg(i.toString))