如何在Scala中重置两次移位?

时间:2011-05-28 17:28:19

标签: scala exception-handling continuations

我从blog post了解shift中的reset是如何实现的。

reset { 1 + shift {k:Int => Int => k(5)} + 1}

具体化为

val reified = {shiftValue:Int => 1 + shiftValue + 1}; reified (5)

现在我有另一个例子:

reset { 
  1 + shift(k1:Int => Int => k1(5)} + 1;
  2 + shift(k2:Int => Int => k2(6)} + 2
}

具体到:

val reified ={shifyValue1:Int =>
    1 + shiftValue + 1; 
    2 + shift(k2:Int => Int => k2(6)} + 2
}
reified(5)

如何进一步将其重新定义以摆脱第二个shift

1 个答案:

答案 0 :(得分:4)

val reified ={shiftValue1:Int =>
    1 + shiftValue + 1; 
    val reified2 = {shiftValue2: Int => 2 + shiftValue + 2};
    reified2(6)
}
reified(5)

基本上是相同的转变。

(scala没有安装在这里,所以我只在Scheme中测试了这个转换,它应该表现相同,忽略任何类型的系统问题。)