问题描述
在Scala 2.13.x中,当我将占位符用于未使用的变量时,我得到scala.MatchError: null
:
scala> object Test {
| val _: Any = null
| }
object Test
scala> Test
scala.MatchError: null
... 41 elided
但是在Scala 2.12.x中,我没有得到scala.MatchError: null
:
scala> object Test {
| val _: Any = null
| }
defined object Test
scala> Test
res1: Test.type = Test$@784c5ef5
有什么理由吗?
解决方法
- 除非加引号,否则下划线不再是合法标识符(错误号10384)
- val _ =现在是模式匹配(并且在不引起警告的情况下放弃了该值)
- 使提取器模式为null安全。 (#6485)
- null被视为不匹配。
将两者结合在一起时,我们可以发现Scala 2.13的设计不可能做到这一点。有关更多信息,您可以在实现两个功能的github的pull request中阅读有关信息:
除非加反引号-https://github.com/scala/bug/issues/10384
,否则下划线不再是合法标识符使提取器模式为null安全-https://github.com/scala/scala/pull/6485