为什么匿名函数中的显式返回语句(使用return
关键字的语句)从封闭的命名函数返回,而不仅仅是从匿名函数本身返回?
例如,以下程序会导致类型错误:
def foo: String = {
((x: Integer) => return x)
"foo"
}
我知道建议避免使用该return
关键字,但我对为什么显式和隐式返回语句在匿名函数中具有不同语义感兴趣。
在下面的示例中,return 语句m
在执行完毕后“存活”,程序导致运行时异常。如果匿名函数没有从封闭函数返回,则无法编译该代码。
def main(args: Array[String]) {
m(3)
}
def m: (Integer => Unit) =
(x: Integer) => return (y: Integer) => 2