Continuations


Данная статья не содержит никаких масштабных метафор, тонких ассоциаций или суровой сатиры. Поэтому интересна она будет только программистам. Да и то не всем.

Целью данной статьи является объяснение момента, который вызывает массу вопросов, а не обучение годному стилю написания программ и не рекомендация всё тут описанное в обязательном порядке использовать.

«Продолжения». Вопросы, что это такое, и зачем оно может понадобиться в Scala, имеются в изобилии практически в любом месте, где Scala обсуждается в постоянном режиме. А вот ответы на эти вопросы, напротив, почти не имеются.

Но если ответ всё-таки есть, то с вероятностью 99% им будет вот этот пример.

reset {
    shift { k: (Int => Int) =>  // The continuation k will be the '_ + 1' below.
        k(7)
    } + 1
}
// Result: 8

Данный пример поражает своей неинформативностью. Лично я по нему в принципе не смог бы ничего понять, даже если с самого начала бы знал, о чём тут идёт речь. И то, что я в этом вопросе не одинок, подтверждается наличием множества цитат этого примера с приписыванием к нему фраз в стиле «что тут вообще происходит?» (далее…)