Smalltalk 在海边继续工作

Smalltalk 在海边继续工作,smalltalk,squeak,continuations,seaside,callcc,Smalltalk,Squeak,Continuations,Seaside,Callcc,如何在Squeak中获得BlockClosure(我想使用BlockClosure>>callCC) 当我写[#foo]这是一个区块上下文时,交易是什么 更新:我发现BlockClosure主要是新编译器的一部分 相反,我如何处理海边的续集?我有问题,任何例子都将不胜感激 进一步更新:其目的不是使用seaside(至少不是直接使用),而是以一种比使用我自己的状态跟踪迭代器更容易的方式编写遍历和其他类似的内容。通常,使用seaside,您根本不必自己处理延续 您只需在组件中使用#call:和#an

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

当我写[#foo]这是一个区块上下文时,交易是什么

更新:我发现BlockClosure主要是新编译器的一部分

相反,我如何处理海边的续集?我有问题,任何例子都将不胜感激


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

通常,使用seaside,您根本不必自己处理延续

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

如果您试图用
Continuation
做一些其他事情,而不是编写一个Seaside应用程序,请查看
WAComponent>>调用:
以了解用法示例

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

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:的每个值都会导致恢复continuation的上下文,并将新值分配给
result

希望这有帮助