演员B包含对名为senderr
的演员A的引用。演员A ask
的演员B,等待响应并打印出来。但它没有收到回应。为什么?它必须在控制台打印4号,但它没有。
class A(b: ActorRef) extends Actor {
private implicit val timeout = Timeout(20 seconds)
b ! 1
def receive = {
case 2 => (b ? 3).map(println)
}
}
class B extends Actor {
var senderr : ActorRef = null
def receive = {
case 1 =>
senderr = sender()
sender ! 2
case 3 =>
senderr ! 4
}
}
object Main extends App {
val system = ActorSystem("test")
val b = system.actorOf(Props[B])
val a = system.actorOf(Props(classOf[A], b))
}
答案 0 :(得分:1)
ask
基本上创建了一个临时微行动者,其唯一目的是接收Any
类型的一个回复
当B
收到3
时,它会4
向senderr
发送A
。但A
与4
不匹配。要让(b ? 3).map(println)
收到4
,B
必须将其发送到sender()
,ask
当时指的是case 3 => sender ! 4
设置的临时演员:
case 4
或者,您可以在A
中拥有ask
,但之后您甚至不需要使用class Person {
constructor(name) {
this.name_ = name;
}
get name() {
return this.name_;
}
}