2012-01-13 6 views
3

が、私はウィキ、記事を読み始め、そしてこの「シンプル」の例に来た:スカラ座の知識がなくてもスカラ:区切り継続は説明 - 継続の概念に興味を持っていない

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

が、私は完全に失われましたよここでは、8がどのように出てくるのか理解できませんでした。

以下は、意味を理解しようとしたが失敗した方法です。どんな男が私に短い説明をしてくれますか?うん

  • (Int=>Int)

    は、C#のデリゲートのように見える...そこScalaの文法書ですが、彼らは私がマスターScalaの言語よりも理解限定継続のコンセプトで、より興味が、厚すぎる、入力はintです、出力はIntです。 Kであり、何が何であるかを私はここに迷ってしまいました

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

    ...(のInt =>の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

+1

私は、あなたがScalaの知識がなくてもScalaのコードを理解しようとすると、この作業をもっと難しくすると思います。構文のような、言語の基礎を学ぶことをお勧めします。そこに[書籍](http://www.scala-lang.org/node/959)と[その他のリソース](http://docs.scala-lang.org/)がたくさんあります。 – tenshi

+0

あなたはhttp://en.wikipedia.org/wiki/Continuationsを読んだことがありますか? –

答えて

2

私は "Monadologie:タイプの不安のための専門のヘルプを"、クリス・リーグの話を見つけました( http://vimeo.com/13304075)は、区切られた継続のより良い例の1つを含む。

1

fotNelton、どうもありがとう!このリンクのAlex Nethの答えが私を助けました。今私はそれを得たと思う。私が自分の質問に答えて、メモとして書き留めてみましょう。リセットおよびシフトの

文法:

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

それは実際にC#スタイルの擬似コードでは、意味:

public delegate OutpututParameterType CFDelegate(InputParameterType); 

CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset; 

CodeBlockInsideShift; 
関連する問題