Предположим, у меня есть следующий код (в C-подобном синтаксисе):
void foo(int arg) { ... }
int bar() {
...
// call with continuation
...
}
foo ( bar() )
// after foo invocation
1) Функция foo
вызывает функцию bar
, которая работает, пока не достигнет строки с call with continuation
.
2) В этой строке создается функция continuation
.Он представляет остальную часть bar
и foo
.Функция continuation
передается в качестве аргумента функции call with continuation
.
3) Функция call with continuation
делает с аргументом все, что ей нужно (например, она может просто храниться в глобальной переменной), и возвращает.
4) Как только возвращается call with continuation
, мы сразу же переходим к строке с «after foo invocation», а остальные bar
и foo
не выполняются.
5) ВЧтобы продолжить выполнение bar
и foo
, мы должны явно вызвать функцию continuation
(созданную в (2) и, вероятно, сохраненную в (3)).После вызова функции continuation
выполнение продолжается сразу после call with continuation
.
. Это правильно?Я что-то упускаю из неограниченных продолжений?