5

使用 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

任何原因?

4

1 回答 1

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

于 2020-09-02T11:53:44.647 回答