Актеры обычно имеют внутреннее состояние, будучи самими изменчивыми животными. Обратите внимание, что актеры не являются предметом FP.
Кажется, что описываемая вами установка основана на изменяемом контроллере, и его трудно обойти на языке, который не является строгим по умолчанию. В зависимости от того, что вы делаете, вы можете положиться на будущее. Например:
case Msg(info) =>
val v1 = new Bot !! Fn1(info)
val v2 = new Bot !! Fn2(info)
val v3 = new Bot !! Fn3(info)
val v4 = new Bot !! Fn4(v1(), v2(), v3())
reply(v4())
В этом случае - потому что !!
возвращает значения Future
- v1
, v2
и v3
будут вычисляться параллельно. Сообщение Fn4
получает в качестве параметров примененное фьючерсы, то есть оно будет ожидать, пока все значения не будут вычислены, прежде чем оно начнет вычисляться.
Аналогичным образом, ответ будет отправлен только после того, как v4
будет вычислено, так как будущее также применяется.
Действительно функциональным способом решения этих задач является функциональное реактивное программирование , или сокращенно FRP. Это другая модель, чем актеры.
Красота Scala, однако, в том, что вы можете комбинировать такие парадигмы настолько, чтобы лучше соответствовать вашей проблеме.