这是两个 REPL 会话(受此问题启发,尽管我的问题不同):
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> def ignore(it: String) = 42
ignore: (it: String)Int
scala> ignore(null.asInstanceOf[Nothing])
res0: Int = 42
和:
Welcome to Scala version 2.10.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> def ignore(it: String) = 42
ignore: (it: String)Int
scala> ignore(null.asInstanceOf[Nothing])
java.lang.NullPointerException
at .<init>(<console>:9)
at .<clinit>(<console>)
at .<init>(<console>:7)
at .<clinit>(<console>)
at $print(<console>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
唯一的区别是第一个是 Scala 2.9.2,第二个是 2.10.0。
有人能指出导致这种新行为的 2.10 中的变化吗?
我知道强制转换Nothing
是一件愚蠢的事情,答案可能是“这都是未定义的行为,所以停止这样做”,但它看起来可能会对升级者产生影响,我不知道'不记得遇到任何可以解释这一点的变化的讨论。