将占位符用于未使用的变量时获取MatchError

问题描述

在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

有什么理由吗?

解决方法

scala 2.13 release notes中所述:

  • 除非加引号,否则下划线不再是合法标识符(错误号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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...