Scala:带分隔符的续篇已解释-未解释



对延续的概念感兴趣,我开始阅读Wiki、帖子,并得出了这样的结论"简单的";示例:

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

没有Scala的知识,我完全迷失在这里,无法理解8是如何产生的。

以下是我如何试图弄清楚它的含义,但没有成功。有人能给我一个简短的解释吗?是的,有Scala语法书,但它们太厚了,我更感兴趣的是理解定界延续概念,而不是掌握Scala语言。。。

  • (Int=>Int)

    看起来像一个C#委托,输入是Int,输出是Int.

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

    我在这里迷路了。。。什么是k,什么是(Int=>Int)=>k(7)?

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

    更失落的是。。。

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

    甚至越来越失落。。。

我找到了Chris League的演讲,"Monadologie:治疗类型焦虑的专业帮助"(http://vimeo.com/13304075)包含一个更好的定界延续示例。

fotNelton,非常感谢!Alex Neth在链接中的回答帮助了我。现在我想我明白了。让我回答我自己的问题,把它点下来作为笔记。

重置和移位语法:

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

这实际上意味着,在C#风格的伪代码中:

public delegate OutpututParameterType CFDelegate(InputParameterType);
CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset;
CodeBlockInsideShift;

最新更新