2008-10-20 86 views
2

如何在Squeak中獲得BlockClosure(我想使用BlockClosure >> callCC)?使用Seaside延續

當我寫[#foo]是一個BlockContext時,這是怎麼回事?

更新:我已經確定BlockClosure是一個主要是新編譯器的東西。

相反,我如何與海邊延續工作?我有問題,任何示例都將不勝感激。

進一步更新:這樣做的目的不是用海邊(至少不是直接),而是用比自己的狀態跟蹤迭代器更容易的方式編寫遍歷和其他類似的東西。

回答

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。現在,在工作區,這樣做:

continuation value: 2 

然後:

continuation value: 3 

你應該看到每次傳遞給在成績單顯示continuation價值,因爲每個值傳遞給#VALUE:使上下文將繼續進行恢復,並將新值分配給result

希望這會有所幫助...

+0

Julian會否將此更新爲Seaside 3.0? – mozillanerd 2012-09-05 03:03:37