在我的演员中,我必须创建一个向另一个演员发送消息的类。另一个演员应回复演员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)
}
}
有更优雅的方法来解决这个问题吗?
答案 0 :(得分:1)
演员B收到正确的引用,但不是A.但是你已经回答了自己的问题。
另一种方法包括:
在这种情况下,你的DefaultHandler也必须保留对原始Actor的引用。