3

对延续的概念感兴趣,我开始阅读 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 }

    甚至越来越失落……

4

2 回答 2

2

我发现 Chris League 的演讲“Monadologie:类型焦虑的专业帮助”(http://vimeo.com/13304075)包含了一个更好的定界延续示例。

于 2012-01-13T15:18:42.977 回答
1

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

重置和移位语法:

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

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

public delegate OutpututParameterType CFDelegate(InputParameterType);

CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset;

CodeBlockInsideShift;
于 2012-01-13T10:59:14.713 回答