1. ホーム
  2. scala

[解決済み] Scalaの継続性とは何か、なぜ継続性を使うのか?

2023-05-26 09:11:20

質問

私は今 Scalaでプログラミング で、Scala 2.7と2.8の間の変更点を調べてみました。一番重要そうなのはcontinuationプラグインなんだけど、何に役立つのか、どう動くのかがよくわからない。非同期I/Oに良いというのは見たことがあるのですが、なぜそうなるのかがわからないのです。このテーマに関するより一般的なリソースをいくつか紹介します。

そしてStack Overflowでのこの質問。

残念ながら、これらのリファレンスのどれも、継続が何のためにあるのか、またはシフト/リセット関数が何をすることになっているのかを定義しようとしていませんし、定義しているリファレンスも見つかっていません。 リンク先の記事にある例がどのように動作するのか (あるいは、何をするのか) を推測することができないので、これらのサンプルを 1 行ずつ見ていくことが、私を助けてくれる 1 つの方法かもしれません。3 番目の記事からのこの単純なものでさえもです。

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

なぜ結果が8なのでしょうか?それはおそらく私が始めるのに役立つだろう。

どのように解決するのですか?

私の ブログ resetshift を使うので、もう一度読んでみてください。

もうひとつの良い資料は、私もブログで紹介していますが、Wikipedia の 継続パスのスタイル . これは,Scala の構文を使わず,明示的に継続を渡していますが,この件に関しては圧倒的に明確です.

私のブログでリンクしているのですが、壊れてしまったようで、区切られた継続に関する論文は、多くの使用例を示しています。

しかし、私が思うに、最も良い例は 概念 の最も良い例は Scala Swarm だと思います.その中で,ライブラリ が停止する で停止させ,残りの計算を継続させます.この場合、ライブラリは計算を別のホストに転送し、その結果(アクセスされた変数の値)を停止された計算に返します。

さて、あなたは Scala のページにある簡単な例さえ理解していないので を実行します。 を読んでみてください。その中で私は だけ この基本的なことを説明することに関心があり、なぜその結果が 8 .