移位在复位块中的位置有关系吗?

| 假设有一个带有单个
shift
reset
块: val r =重置{    //做某事。 1个    移{...}    //做某事。 2    //做某事。 3 } 我将ѭ1放在\“ do smth。2 \”或\“ do smth。3 \”之后而不更改结果
r
是否正确?
shift
reset
块中的位置无关紧要吗?     
已邀请:
        这很大程度上取决于您在
shift
内的收入。如果您只是这样调用提供的函数:
shift((k: Unit => Unit) => k(Unit))
,那么在您的特定示例中,
shift
的位置实际上并不重要。
Shift
函数仅捕获其他函数之后的代码(在我的示例中,此函数称为
k
)。换句话说,此代码:
val r = reset { 
   // do smth. 1
   shift((k: Unit => Unit) => k(Unit))
   // do smth. 2
   // do smth. 3
}
将由编译器以如下方式重写(此代码仅演示了一般思想,并且不应该显示编译器插件将实际生成的内容):
val k = (Unit => Unit) => {
    // do smth. 2
    // do smth. 3
} 

val r = { 
   // do smth. 1
   k(Unit)
}
但是,如果您在
shift
中有一些逻辑,例如有条件的
k
执行,那么这
shift
所在的位置确实很重要。 希望这会有所帮助(并且希望我能正确理解您的问题)     
        只需添加已给出的答案,您可以在
shift
附近移动的位置是是否在移位之前有代码,或者将其包含在传递给
shift
的函数中:
reset { 
  foo(); bar();
  shift { k => stuff }
  baz()
}
是相同的
reset {
  foo();
  shift { k => bar(); stuff }
  baz()
}
    

要回复问题请先登录注册