任何人都可以解释为什么下面的方法正在编译而没有任何错误消息?我期待死代码警告或类似的东西。编译是否有原因?
def somethingAfterReturn(): Int = {
println("That is ok..");
return 1
println("WTF is going on here?");
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)
编译器看到返回后的代码永远不会被执行,所以他忽略了它......所以我想