对未使用的变量使用占位符时出现 MatchError

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)

任何原因?

Tom*_*tah 7

Scala 2.13 发行说明中所述

  • 下划线不再是合法标识符,除非反引号 (bug#10384)
    • val _ = 现在是模式匹配(并丢弃该值而不产生警告)
  • 使提取器模式空安全。(#6485)
    • null 被视为不匹配。

将两者结合起来时,我们可以看到 Scala 2.13 的设计不可能做到这一点。有关更多信息,您可以在实现这两个功能的 github 上的拉取请求中阅读:

下划线不再是合法标识符,除非反引号 - https://github.com/scala/bug/issues/10384

使提取器模式无效 - https://github.com/scala/scala/pull/6485