从其他类发送时获取正确的scala actor发送方引用

从其他类发送时获取正确的scala actor发送方引用,scala,actor,Scala,Actor,在我的actor中,我必须创建一个类来向另一个actor发送消息。另一个参与者应该回复参与者A class A extends Actor { val b = new B b.start val i = new DefaultHandler() { override def fun(a: String) = { b ! payload } } someotherclass.registerHa

在我的actor中,我必须创建一个类来向另一个actor发送消息。另一个参与者应该回复参与者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

          }
}
现在的问题是,当从内部类发送时,我不再属于actor本身,因此actor B没有获得对actor B的正确引用。解决这一问题的一种方法是通过消息传递对a的引用,但这在我看来非常难看

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

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

参与者B收到正确的引用,而不是A。但是您已经回答了自己的问题

另一种方法将包括:

  • 从演员延伸
  • 可选:隐式转换为您的角色类型
  • 在消息运算符中具有隐式参与者引用
  • 在这种情况下,DefaultHandler还必须保留对原始参与者的引用