返回语句后为什么没有死代码警告?

时间:2012-10-21 17:33:14

标签: scala return

任何人都可以解释为什么下面的方法正在编译而没有任何错误消息?我期待死代码警告或类似的东西。编译是否有原因?

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

3 个答案:

答案 0 :(得分: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会忽略unreachable code

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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