Ну, это переполняет стек по очень очевидным причинам; он рекурсивный, но не хвостовой. Здесь есть два варианта:
Либо : использовать цикл while:
def act() =
while(true) {
receiveWithin(2000) {
case Stop => println("stoping puller"); exit()
case Noop => println("nothing happens")
case TIMEOUT => doPull
}
}
или : используйте loop
и react
(что дает дополнительное преимущество, заключающееся в возможности масштабирования за счет отделения актора от зацепления одного потока).
def act() =
loop {
reactWithin(2000) {
case Stop => println("stoping puller"); exit()
case Noop => println("nothing happens")
case TIMEOUT => doPull
}
}
Если этот код существует в Программирование на Scala , он, скорее всего, подразумевает скорее подтверждение концепции, нежели жизнеспособный производственный код. Фактически из памяти объясняется, как можно избежать рекурсивных вызовов act
.