2

如何在 Squeak 中获得 BlockClosure(我想使用 BlockClosure>>callCC)?

当我写 [#foo] 是一个 BlockContext 时,有什么关系?

更新:我发现 BlockClosure 主要是新编译器的东西。

相反,我如何使用 seaside Continuations?我遇到了问题,任何例子都将不胜感激。

进一步更新:这样做的目的不是使用 seaside(至少不是直接使用),而是以一种比滚动我自己的状态跟踪迭代器更容易的方式编写遍历和其他类似的东西。

4

1 回答 1

7

通常,使用 Seaside,您根本不需要自己处理 Continuations。

您只需在组件中使用#call:#answer:

Continuation如果除了编写 Seaside 应用程序之外,您还试图做其他事情,请查看WAComponent>>call:使用示例。

或者试试这个。打开一个成绩单窗口。现在,在工作区中,一次选择所有这些代码并执行它:

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

Transcript show: result.

您应该看到1显示在 Transcript 窗口中。现在,在工作区中,执行:

continuation value: 2

进而:

continuation value: 3

您应该看到您传递给的每个值都continuation显示在 Transcript 中,因为您传递给 #value: 的每个值都会导致继续的上下文被恢复并且新的值被分配给result.

希望这会有所帮助...

于 2008-10-21T15:34:07.920 回答