scala不建议用return

return影响类型推断

类型推断机制会自动将最后一个表达式的类型作为返回类型,如下:

def f(x:Int) = x + 1    //式1.2

如果使用了 return ,就会破坏类型推断机制,需要显式注明返回类型,不写会报错,如下:

def f(x:Int):Int = return x + 1     //式1.3

循环中的return

在scala的循环中的return实际上是通过抛异常实现的,编译后发现

return value

被编译成了

throw new NonLocalReturnControl(key/*metadata*/, value)

而NonLocalReturnControl的源码为:

class NonLocalReturnControl[@specialized T](val key: AnyRef, val value: T) extends ControlThrowable {
    final override def fillInStackTrace(): Throwable = this
}

可以看到 NonLocalReturnControl 异常继承了 Throwable

lambda表达式中的return

也将 return 编译成 NonLocalReturnControl


原文出处:/show_1IX1OAnQPotp.html