这里有两个REPL课程(灵感来自
this question,虽然我的问题不同):
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中的变化吗?
我知道,将“无事”变成一个愚蠢的事情,而且答案可能是“这是所有未定义的行为,所以只是停止这样做”,但它看起来像是可能对升级程序有影响的那种事物,而我不记得任何讨论的变化,将解释这一点.