SCALA:説明された継続的な継続 - そうではありません
-
27-10-2019 - |
質問
継続の概念に興味があるので、私はウィキを読み始め、投稿を始め、この「単純な」例に到達しました。
reset {
...
shift { k: (Int=>Int) => // the continuation k will be the '_ + 1' below
k(7)
} + 1
}
// result: 8
Scalaの知識がなければ、私はここで完全に迷子になり、8がどのように出てくるかを理解できませんでした。
以下は、意味を理解しようとしたが失敗した方法です。誰かが私に短い説明をくれませんか?ええ、Scala Grammar Booksがありますが、それらは厚すぎます。マスターScala言語よりも削除された継続コンセプトを理解することに興味があります...
(Int=>Int)
c#delegateのように見え、入力は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:Professional Help for Type Anxiety」(http://vimeo.com/13304075)区切られた継続のより良い例の1つが含まれています。
他のヒント
Fotnelton、どうもありがとう!リンクでのアレックス・ネスの答えは私を助けてくれました。今、私はそれを手に入れたと思います。私自身の質問に答えて、メモとしてドットダウンしてください。
リセットとシフトの文法:
reset {
...
shift { cf: (InputParameterType => OutpututParameterType) =>
CodeBlockInsideShift
}
CodeBlockAfterShiftBeforeEndOfReset
}
実際には、C#スタイルの擬似コードでは:
public delegate OutpututParameterType CFDelegate(InputParameterType);
CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset;
CodeBlockInsideShift;
所属していません StackOverflow