Вот два сеанса 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
- это глупое дело, и что ответ может быть "это все undefined поведение, поэтому просто прекратите это делать", но оно похоже на то, что может потенциально имеют последствия для обновителей, и я не помню, чтобы прибегать к обсуждению изменений, которые могли бы объяснить это.