Akka docs вызывает получение Актера как метод. Но согласно API это член абстрактного типа, а не абстрактный метод. По какой причине получение называется методом?
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 пообещали ввести типизированные сообщения; не уверен, что они уже выпустили его в последней версии.
Похожие вопросы
Новые вопросы
scala
Scala - это язык программирования общего назначения, в основном предназначенный для виртуальной машины Java. Разработанный для краткого, элегантного и безопасного для типов представления общих шаблонов программирования, он сочетает в себе как императивный, так и функциональный стили программирования. Его ключевые особенности: продвинутая система статического типа с выводом типа; типы функций; сопоставления с образцом ; неявные параметры и преобразования; перегрузка оператора; полная совместимость с Java; совпадение