Скала: разграниченные продолжения объяснено - не
-
27-10-2019 - |
Вопрос
Заинтересован в концепции продолжения, я начал читать вики, посты и пришел к этому «простому» примеру:
reset {
...
shift { k: (Int=>Int) => // the continuation k will be the '_ + 1' below
k(7)
} + 1
}
// result: 8
Без знаний о Scala я полностью потерян здесь, не мог понять, как выходит 8.
Ниже я пытался выяснить значение, но не удалось. Любой парень, не могли бы вы дать мне короткое объяснение? Да, есть книги по грамматике Scala, но они слишком толстые, я больше заинтересован в понимании концепции продолжения разграниченного продолжения, чем на языке Master Scala ...
(Int=>Int)
Похоже на делегат C#, вход int, выход int.
k: (Int=>Int) => k(7)
Я потерял здесь ... что такое k и что такое (int => int) => k (7)?
shift { k: (Int=>Int) => k(7) } + 1
Еще более потерянный ...
reset { ...; shift { k: (Int=>Int) => k(7) } + 1 }
Еще все больше и больше потеряно ...
Решение
Я нашел выступление Криса Лиги: «Monadologie: профессиональная помощь для тревоги типа» (http://vimeo.com/13304075) содержит один из лучших примеров ограниченного продолжения.
Другие советы
Fotnelton, большое спасибо! Ответ Алекса Нета в ссылке помог мне. Теперь я думаю, что получил это. Позвольте мне ответить на мой собственный вопрос, чтобы утомить вниз как записку.
Грамматика сброса и сдвига:
reset {
...
shift { cf: (InputParameterType => OutpututParameterType) =>
CodeBlockInsideShift
}
CodeBlockAfterShiftBeforeEndOfReset
}
Это на самом деле означает, что в псевдо -коде C# Style:
public delegate OutpututParameterType CFDelegate(InputParameterType);
CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset;
CodeBlockInsideShift;