2

Squeak で BlockClosure を取得するにはどうすればよいですか (BlockClosure>>callCC を使用したい)?

BlockContext である [#foo] を書くとどうなりますか?

更新: BlockClosure は主に新しいコンパイラのものであることがわかりました。

代わりに、海辺の継続をどのように扱うのですか? 私は問題を抱えています。例を教えていただければ幸いです。

さらなる更新: これの目的は、海辺を (少なくとも直接ではなく) 使用することではなく、独自の状態追跡イテレーターをローリングするよりも簡単な方法でトラバーサルなどを記述することです。

4

1 に答える 1

7

通常、Seasideでは、継続を自分で処理する必要はまったくありません。

コンポーネント内から#call:使用するだけです。#answer:

ContinuationSeasideアプリケーションを作成する以外の方法で何かをしようとしているWAComponent>>call:場合は、使用例を見てください。

またはこれを試してください。トランスクリプトウィンドウを開きます。次に、ワークスペースで、このコードをすべて一度に選択し、実行します。

continuation := nil.
result := Continuation currentDo: [:cc |
   "store the continuation, cc, somewhere for later use"
   continuation := cc.
   1 ].

Transcript show: result.

1トランスクリプトウィンドウにが表示されます。次に、ワークスペースで次の操作を行います。

continuation value: 2

その後:

continuation value: 3

continuation#value:に渡す各値により、継続のコンテキストが復元され、新しい値がに割り当てられるため、渡した各値がトランスクリプトに表示されresultます。

うまくいけば、それが役立つ...

于 2008-10-21T15:34:07.920 に答える