У меня есть что-то вроде этого:Scala случае класс не соответствует в получить метод (в AKKA актеров)
class ProbeActor extends Actor {
case class Probe(messageKey: String)
def receiveProbe: Receive = {
case Probe(probeKey) => println("Good probe: "+probeKey)
case x => println("Bad probe: "+ x)
}
final override def receive = receiveProbe orElse receiveOther
def receiveOther: Receive = {
case _ => println("Other")
}
}
и я называю это так:
class Prober extends ProbeActor {
val definite = ActorSystem("ProbeTest").actorOf(Props[ProbeActor], name = "probed")
implicit val timeout = Timeout(5 second)
val future = definite ? Probe("key")
}
Я ожидаю, что текст "Good probe: key"
РЕКОМЕНДУЕМЫМ печататься, но я получаю "Bad probe: Probe(key)"
.
Примечание: Если я положил класс корпуса Probe
снаружи, то он отлично работает.
Это правильно. Я думаю, по соглашению вы должны помещать свои сообщения в сопутствующий объект актера, а не в самого актера. При этом у вас не должно быть проблем с зависимой типизацией, и вам не нужно сохранять ссылку на актера, который считается плохим – Archeg