谁能解释为什么下面的方法在编译时没有任何错误消息?我期待一个死代码警告或类似的东西。它有编译的原因吗?
def somethingAfterReturn(): Int = {
println("That is ok..");
return 1
println("WTF is going on here?");
3
}
首先,试试这个:
$ 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 会忽略无法访问的代码。
编译器允许这样做,因为它在语法上是有效的。
编译器看到返回后的代码永远不会被执行,所以他忽略了它......所以我认为