Как перегрузить оператор взрыва (!) В модели Scala Actor?

В реализации модели Actor в Scala мы можем переопределить оператор bang (!). Можем ли мы изменить операцию передачи сообщений, перегрузив этот оператор?

Пример сценария: мне нужно включить регистрацию информации, когда любой актер вызывает другого актера, передавая сообщение. Таким образом, перегрузив оператор передачи сообщений (!), Могу ли я

отслеживать передачу сообщений между различными субъектами и избегать включения оператора логгера для каждого вызова передачи сообщений субъекту?

Ответы на вопрос(3)

В Акке вы не можете переопределить! оператор, так как вы не можете создавать подклассы ActorRef осмысленным образом (то есть они не будут генерироваться соответствующими фабричными методами), и причина этого в том, что это на самом деле не то, что вы хотите (пожалуйста, поверьте мне здесь).

Ваш заявленный вариант использования уже охваченвстроенный функционал:

import akka.event.LoggingReceive
def receive = LoggingReceive {
  case x => ...
}

который будет регистрировать сообщение для каждого вызова, если вы включите эти параметры конфигурации:

akka {
  loglevel = DEBUG
  actor.debug {
    receive = on     // this enables the above
    autoreceive = on // same for the likes of PoisonPill, Kill, …
    lifecycle = on   // will log actor creation, restart, termination
  }
}

В реализации модели Actor в Scala мы можем переопределить оператор bang (!).

Можно, но я бы настоятельно рекомендовал против этого.

Пример сценария: мне нужно включить регистрацию информации, когда любой актер вызывает другого актера, передавая сообщение.

Это победилоне работаю с актерами, которые неРасширение вашего типа: актеры системы Akka, актеры, созданные библиотеками и т. д.

Это уже может быть сделано AkkaПросто установите.akka.debug.receive = on

 Jmoney3822 нояб. 2013 г., 01:01
Похоже на CISE ;-)

Вы можете попробовать следующий код.

override def !(msg:Any):Unit =
{
   //logic for writing to logs..
   super.!(msg)
}

Это отлично работает. Тем не менее, я хочу различать поведение!, В зависимости от сообщений, которые я отправляю. например ниже:

actor_name!(arg1,arg2,arg3)
actor_name1!(arg4, arg5)

Как я могу различать эти две нотации отправки сообщений в переопределенном коде?

Ваш ответ на вопрос