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

当我写[#foo]那是一个BlockContext时,怎么办?

更新:我已经知道BlockClosure主要是新编译器的东西。

相反,我如何与“海边延展”一起使用?我遇到了问题,任何示例都将不胜感激。

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

最佳答案

通常,使用Seaside,您根本不必自己处理Continuation。

您只需在组件中使用#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。现在,在工作区中,执行以下操作:

continuation value: 2


然后:

continuation value: 3


您应该在“成绩单”中看到传递给continuation的每个值,因为传递给#value:的每个值都将导致继续上下文的恢复以及将新值分配给result

希望有帮助...

关于smalltalk - 与海边延续一起工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/219958/

10-11 17:45