2013-12-09 4 views
0

В актерах Scala мы всегда узнаем, что «react does not return». Что именно это значит? В чем разница между методом, который не возвращается, и который возвращает Unit.Что значит сказать, что метод (например, «реагировать») не возвращается?

У меня создалось впечатление, что каждый метод должен в конечном итоге закончить (и может или не вернуть что-либо). Итак, что происходит, когда react заканчивается?

+0

Смотрите также http://stackoverflow.com/questions/9704696/scala- актеры-если реагировать-никогда возвраты-почему-делает-это необходимо, чтобы быть-в-петлю-и-WH – DNA

ответ

2
def react(...): Nothing = ... 

Вы не можете получить экземпляр Nothing. Это означает, что react будет работать более качественно.

Он будет работать вечно или, в конце концов, исключит исключение.

react(...) 
println("You'll never get here!") 

В случае Actor#react это просто throws исключение.

Метод loop ловит это исключение. Подробное объяснение см. Actors that Unify Threads and Events, Филипп Халлер и Мартин Одерски, Proc. КООРДИНАЦИИ 2007. Вам не нужно это детали, чтобы работать с актерами, вы просто должны знать, что весь код после react недостижим:

loop { 
    <code before react> 
    react {...} 
    <unreachable code> 
} 
Смежные вопросы