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