2011-09-28 46 views
1

如何運行2名阿卡演員與主叫方發送的消費信息每N秒? 由於沒有環反應的方法如在Scala.Actors庫我卡住 某種方式,下面將不會編譯併產生:設置Akka.Actors如何正確比較Scala.Actors

重寫方法接收在類型=> Caller.this的性狀演員。接收;方法收到了不兼容的類型

object Foo { 
    def init() { 
    actorOf[Caller].start() 
    actorOf[Consumer].start() 
    } 
} 

class Caller extends Actor { 

    def receive { 
    while (true) { 
     self ! "msg" 
     Thread.sleep(1000) 
    } 
    } 
} 

class Consumer extends Actor { 

    def receive = { 
    case msg:String => doStuff() 
    case e => _ 
    } 
} 

回答

3

你錯過了equals來電顯示receive後簽字。如果沒有它,該方法被定義爲返回Unit(即沒有有用的值),和阿卡需要你返回來自接收PartialFunction[Any,Unit]

現在,真正實現你的邏輯在慣用的方式,你可能想使用ReceiveTimeout,像這樣:

class Caller extends Actor { 
    self.receiveTimeout = Some(1000) 

    def receive = { 
    case ReceiveTimeout => 
     self ! "msg" 
    } 
}