him*_*ian 5 null scala pattern-matching unused-variables scala-2.13
使用 Scala 2.13.x,scala.MatchError: null当我对未使用的变量使用占位符时,我得到了:
scala> object Test {
| val _: Any = null
| }
object Test
scala> Test
scala.MatchError: null
... 41 elided
Run Code Online (Sandbox Code Playgroud)
但是使用 Scala 2.12.x,我没有得到scala.MatchError: null:
scala> object Test {
| val _: Any = null
| }
defined object Test
scala> Test
res1: Test.type = Test$@784c5ef5
Run Code Online (Sandbox Code Playgroud)
任何原因?
- 下划线不再是合法标识符,除非反引号 (bug#10384)
val _ =现在是模式匹配(并丢弃该值而不产生警告)- 使提取器模式空安全。(#6485)
null被视为不匹配。
将两者结合起来时,我们可以看到 Scala 2.13 的设计不可能做到这一点。有关更多信息,您可以在实现这两个功能的 github 上的拉取请求中阅读:
下划线不再是合法标识符,除非反引号 - https://github.com/scala/bug/issues/10384
使提取器模式无效 - https://github.com/scala/scala/pull/6485