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



使用Scala 2.13.x,当我为一个未使用的变量使用占位符时,我得到了scala.MatchError: null

scala> object Test {
|   val _: Any = null
| }
object Test
scala> Test
scala.MatchError: null
... 41 elided

但是使用Scala2.12.x,我不会得到scala.MatchError: null:

scala> object Test {
|   val _: Any = null
| }
defined object Test
scala> Test
res1: Test.type = Test$@784c5ef5

有什么原因吗?

如scala 2.13发行说明所述:

  • Undercore不再是合法标识符,除非反向引用(错误#10384(
    • val _ =现在是模式匹配(并且丢弃该值而不会引起警告(
  • 使提取器模式为空安全。(#6485(
    • null被视为不匹配

当将两者结合在一起时,我们可以看到这在Scala2.13的设计中是不可能的。有关更多信息,您可以在github的pull请求中阅读实现这两个功能的信息:

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

使提取器模式为空安全-https://github.com/scala/scala/pull/6485

相关内容

  • 没有找到相关文章