0

在我的演员中,我必须创建一个向另一个演员发送消息的类。另一个演员应该回复演员A

class A extends Actor {

val b = new B
b.start

val i = new DefaultHandler() {
            override def fun(a: String) = {  
                b ! payload
            }
        }
someotherclass.registerHandler(i)

def act = {
      loop {
        react {
          case reply => //do something

}

class B extends Actor {

def act = {
      loop {
        react {
          case msg => sender ! reply

          }
}

现在的问题是,当从内部类发送时,我不再在演员本身内,因此演员 B 没有得到对演员 B 的正确引用。解决此问题的一种方法是通过传递对 A 的引用消息,但这对我来说似乎很丑陋。

val ref = self
val i = new DefaultClass() {
            override def fun(a: String) = {  
                b ! message(payload, ref)
            }
        }

有没有更优雅的方法来解决这个问题?

4

1 回答 1

1

演员 B 收到正确的参考,而不是 A。但是您已经回答了自己的问题。

一种不同的方法包括:

  1. 从 Actor 扩展
  2. 可选:隐式转换为您的 Actor 类型
  3. 在您的消息运算符中有一个隐式的演员引用

在这种情况下,您的 DefaultHandler 还必须保留对原始 Actor 的引用。

于 2009-12-03T12:50:15.267 回答