【问题标题】:Working with Seaside continuations使用 Seaside 延续
【发布时间】:2010-09-18 05:03:14
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: smalltalk squeak continuations seaside callcc


    【解决方案1】:

    通常,使用 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.
    

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

    continuation value: 2
    

    然后:

    continuation value: 3
    

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

    希望对您有所帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-29
      • 2012-11-03
      • 2014-12-10
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 2012-01-17
      • 2021-06-06
      相关资源
      最近更新 更多