0%

Scala报错: scala.runtime.NonLocalReturnControl

原因

  • 多层嵌套 + return 关键字导致 scalac 无法判断这个 return 关键字的作用域, 随后抛出 scala.runtime.NonLocalReturnControl

解决

  • 因为这个错和 npe 差不多, 反正都看不到堆栈, 没法直接定位位置.
  • 想定位的话, 得结合日志和 return 关键字对代码进行仔细观察, 多验证, 总会找到的…

复现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
object NonLocalReturnControl {
def main(args: Array[String]): Unit = {
try {
val r = Math.random() * 1000
r match {
case r1 if r > 0.5 =>
asyncHandler { r =>
// 正确写法
// 1
// 错误写法
return 1
}
// case r2 => return 433
}
} catch {
case e: Throwable =>
e.printStackTrace()
}
}

def asyncHandler(func: Double => Double): Double = {
try {
func(Math.random())
} catch {
case e: Throwable =>
e.printStackTrace()
throw e
}
}
}
-------------本文结束再接再厉-------------

本文标题:Scala报错: scala.runtime.NonLocalReturnControl

文章作者:IITII

发布时间:2023年02月15日 - 21:02

最后更新:2023年02月15日 - 21:02

原始链接:https://iitii.github.io/2023/02/15/1/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。