2012-01-13 44 views
3

有興趣,我開始閱讀維基,崗位,來到了這個「簡單」的例子:斯卡拉:分隔延續解釋 - 在連續的概念不

reset { 
    ... 
    shift { k: (Int=>Int) => // the continuation k will be the '_ + 1' below 
    k(7) 
    } + 1 
} 
// result: 8 

沒有斯卡拉的知識,我完全失去了在這裏,無法弄清楚8是如何出來的。

以下是我試圖找出含義但失敗的原因。任何人都可以請給我一個簡短的解釋?是啊有斯卡拉語法書,但他們太粗,我更感興趣的是比主Scala語言的理解分隔延續概念...

  • (Int=>Int)

    看起來像一個C#的委託,輸入數據類型爲int ,輸出是Int。

  • k: (Int=>Int) => k(7)

    我在這裏輸了...什麼是K,什麼是(INT =>強度)=> K(7)?

  • shift { k: (Int=>Int) => k(7) } + 1

    更失落......

  • reset { ...; shift { k: (Int=>Int) => k(7) } + 1 }

    甚至更​​多的丟失......

+1

你可能想看看[這個問題](http://stackoverflow.com/questions/1512930/what-are-scala-continuations-and-why-use-them)及其答案。 – fotNelton 2012-01-13 10:22:59

+1

我認爲當你試圖理解非Scala代碼「沒有Scala知識」時,你只會讓自己變得更加困難。我建議你先學習語言的基礎知識,如語法。那裏有很多[書籍](http://www.scala-lang.org/node/959)和[其他資源](http://docs.scala-lang.org/)。 – tenshi 2012-01-13 10:33:53

+0

你讀過http://en.wikipedia.org/wiki/Continuations嗎? – 2012-01-13 10:55:47

回答

1

fotNelton,非常感謝! Alex Neth在鏈接中的回答幫助我解決了問題。現在我想我明白了。讓我回答我自己的問題,作爲一個筆記點點滴滴。

復位和移位的語法:

reset { 
    ... 
    shift { cf: (InputParameterType => OutpututParameterType) => 
    CodeBlockInsideShift 
    } 
    CodeBlockAfterShiftBeforeEndOfReset 
} 

這實際上意味着,在C#風格的僞代碼:

public delegate OutpututParameterType CFDelegate(InputParameterType); 

CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset; 

CodeBlockInsideShift;