2013-12-10 2 views
3

У меня есть класс Актера, который управляет списком Актеров. Когда он получает сообщение определенного типа, он передает его каждому игроку, о котором он знает.Ценность! не является членом Актера

var loggers : List[Logger]  

def receive = { 
    ... 
    // log request 
    case logmessage : LogMessage => { 
     // send message to each logger (if none, nothing happens) 
     for (logger <- loggers) 
     logger ! logmessage 
    } 
    ...  
} 

Я получаю ошибку компиляции на logger ! logmessage: «значение не является членом (пакета) .Logger». ! делает это очень трудным для Google. Класс Logger компилируется, имея свой собственный метод приема, одну строку, включая self ! PoisonPill, что означает! оператор работает там. Они в одном пакете.

+0

, пожалуйста, укажите код для вашего класса Logger. –

+0

Он расширяет актер и реализует прием. Я собирался отредактировать его и удалить тело, но это буквально все, что сейчас. – CPS

ответ

10

Я принимаю Logger extends Actor

В Акки, отправка сообщения делается между ActorRef с, не Actor с. каждого актера является экземпляром ActorRef. Таким образом, вы захотите изменить свои регистраторы var на var loggers: List[ActorRef].

Еще лучше, вы можете использовать ActorSelection, который имеет метод !, который отправляет сообщение всем реферирующим актерам в выборе. Вы можете найти способы создания ActorSelection в Актере context.

P.S. Вы можете использовать "#" page на Scaadocs Akka, чтобы найти методы, начинающиеся с символов. На этой странице вы видите, что есть !, определенный на ScalaActorRef и ScalaActorSelection, оба из которых являются неявными обновлениями от ActorRef и ActorSelection.

+0

Учитывая объект Actor, можно ли получить ActorRef? – CPS

+0

Каждый актер имеет «неявное окончательное значение»: ActorRef' ([см. Документы] (http://doc.akka.io/api/akka/2.2.3/#akka.actor.Actor)) – Dylan

+2

Как показывает Дилан , вы должны * никогда * напрямую обращаться к объекту Actor (кроме тестов). Если вы это сделаете, вы нарушили один из основных принципов Акки. http://doc.akka.io/docs/akka/2.2.3/general/addressing.html#addressing. – Ryan

Смежные вопросы