使用Scala 2.13.x,当我为一个未使用的变量使用占位符时,我得到了scala.MatchError: null
:
scala> object Test {
| val _: Any = null
| }
object Test
scala> Test
scala.MatchError: null
... 41 elided
但是使用Scala2.12.x,我不会得到scala.MatchError: null
:
scala> object Test {
| val _: Any = null
| }
defined object Test
scala> Test
res1: Test.type = Test$@784c5ef5
有什么原因吗?
如scala 2.13发行说明所述:
- Undercore不再是合法标识符,除非反向引用(错误#10384(
val _ =
现在是模式匹配(并且丢弃该值而不会引起警告(- 使提取器模式为空安全。(#6485(
null
被视为不匹配
当将两者结合在一起时,我们可以看到这在Scala2.13的设计中是不可能的。有关更多信息,您可以在github的pull请求中阅读实现这两个功能的信息:
Undercore不再是合法标识符,除非后引号-https://github.com/scala/bug/issues/10384
使提取器模式为空安全-https://github.com/scala/scala/pull/6485