5

谁能解释为什么下面的方法在编译时没有任何错误消息?我期待一个死代码警告或类似的东西。它有编译的原因吗?

def somethingAfterReturn(): Int = {
   println("That is ok..");
   return 1
   println("WTF is going on here?");
   3
}
4

3 回答 3

9

首先,试试这个:

$ scala -e 'def somethingAfterReturn(): Int = { println("That is ok.."); return 1; println("WTF is going on here?"); 3 }'

没有错误,对吧?

然后,试试这个:

$ scala -Ywarn-dead-code -e 'def somethingAfterReturn(): Int = { println("That is ok.."); return 1; println("WTF is going on here?"); 3 }'

默认情况下,Scala 会忽略无法访问的代码

于 2012-10-21T17:42:48.230 回答
1

编译器允许这样做,因为它在语法上是有效的。

于 2012-10-21T17:35:04.497 回答
0

编译器看到返回后的代码永远不会被执行,所以他忽略了它......所以我认为

于 2012-10-21T17:36:21.457 回答