Akka docs вызывает получение Актера как метод. Но согласно API это член абстрактного типа, а не абстрактный метод. По какой причине получение называется методом?

2
codingsplash 9 Янв 2017 в 11:45
3
Не могли бы Вы уточнить? получать из какого класса? может быть ссылка на документы акка, о которых вы говорите?
 – 
pedrorijo91
9 Янв 2017 в 11:46

1 ответ

Лучший ответ

Да, документы можно немного улучшить.

Если вы посмотрите на Характеристика актера, вы заметите, что receive действительно является методом. Actor.Receive в его подписи - это член типа, о котором вы говорите, определенный в Объект-актер.

Итак, receive - это абстрактный метод, который необходимо реализовать каждому Актеру. Его тип - частичная функция; вы можете легко сказать, потому что для этого требуется множество операторов case, например

def receive = {
  case "test" => log.info("received test")
  case _      => log.info("received unknown message")
}

Каждый оператор case принимает Any и возвращает Unit, поэтому фактический тип частичной функции - PartialFunction[Any, Unit]. Для ясности и простоты ребята из Akka решили создать заполнитель для этого конкретного типа, они назвали его Receive и поместили в сопутствующий объект Actor.

Небольшое отступление: многие люди не очень довольны сообщениями типа Any, и ребята из Akka пообещали ввести типизированные сообщения; не уверен, что они уже выпустили его в последней версии.

3
slouc 9 Янв 2017 в 12:27
1
Что касается отступления о типизированных сообщениях, функция Akka Typed является доступно, но все еще экспериментально, в последних выпусках.
 – 
Cyäegha
9 Янв 2017 в 13:44