Scala中“return”语句的目的?

2022-09-01 10:12:10

在Scala中提供声明有什么真正的理由吗?(除了更“Java友好”之外)return


答案 1

忽略嵌套函数,始终可以将 Scala 计算替换为返回值,并使用没有返回的等效计算。这个结果可以追溯到“结构化编程”的早期,被称为结构化程序定理,足够聪明。

使用嵌套函数时,情况会发生变化。Scala允许您将“返回”深埋在一系列嵌套函数中。执行返回时,控件将从所有嵌套函数跳出,跳转到最里面的包含方法,并从中返回(假设该方法实际上仍在执行,否则将引发异常)。这种堆栈展开可以在有例外的情况下完成,但不能通过计算的机械重组来完成(如果没有嵌套函数,这是可能的)。

您实际上想要从嵌套函数内部返回的最常见原因是突破了一个命令式的理解或资源控制块。(命令式 for-understandingon 的主体被转换为嵌套函数,即使它看起来就像一个语句。

for(i<- 1 to bezillion; j <- i to bezillion+6){
if(expensiveCalculation(i, j)){
   return otherExpensiveCalculation(i, j)
}

withExpensiveResource(urlForExpensiveResource){ resource =>
// do a bunch of stuff
if(done) return
//do a bunch of other stuff
if(reallyDoneThisTime) return
//final batch of stuff
}

答案 2

提供它是为了适应那些难以或繁琐地安排所有控制流路径以收敛于方法的词法端的情况。

虽然正如戴夫·格里菲斯(Dave Griffith)所说,这当然是正确的,但您可以消除任何使用,这样做通常比简单地用明显的执行来缩短执行时间更令人困惑。returnreturn

还要注意,返回的是方法,而不是可能在方法中定义的函数(文本)。return