繁体   English   中英

从其他类发送时获取正确的Scala actor发送者参考

[英]Getting the correct scala actor sender reference when sending from an different class

在我的演员中,我必须创建一个将消息发送给另一个演员的类。 另一位演员应回复演员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。但是,您已经回答了自己的问题。

一种不同的方法包括:

  1. 从演员延伸
  2. 可选:对您的演员类型进行隐式转换
  3. 在您的消息运算符中具有隐式的actor引用

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM