假設,我有下面的代碼(以類似C的語法):理解未定延續
void foo(int arg) { ... } int bar() { ... // call with continuation ... } foo (bar()) // after foo invocation
1)功能調用foo
功能bar
,這是運行,直到它到達與call with continuation
線。
2)在此行創建了一個continuation
函數。它代表bar
和foo
的其餘部分。函數continuation
作爲參數傳遞給call with continuation
函數。
3)call with continuation
函數完成它想要的任何參數(例如它可能只是存儲在全局變量中)並返回。
4)一旦call with continuation
返回,我們立即跳轉到「foo調用後」的行,其餘bar
和foo
不執行。
5)爲了繼續bar
和foo
執行,我們應該明確調用continuation
功能,可能存儲在((2創建)(3))。一旦continuation
函數被調用,執行繼續在call with continuation
之後立即執行。
它是正確的嗎?我是否缺少關於無限延續的內容?
您描述的行爲(第4步 - bar和foo的其餘部分未執行)只有在您可以選擇要跳過其執行的點時纔有意義。這將使*分隔*延續。然而,在像'reset' /'shift'這樣的通用定界連續API中,調用延續的行爲就像函數調用一樣,而不是跳轉,因爲在這樣的延續結束之後,它會返回到調用它的代碼。 – hzap 2011-05-28 17:50:19