使用 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 发行说明 https://github.com/scala/scala/releases/tag/v2.13.0:
- Underscore is no longer a legal identifier unless backquoted (bug#10384)
-
val _ =
现在是模式匹配(并丢弃该值而不产生警告)
- Make extractor patterns null safe. (#6485)
当将两者结合起来时,我们可以看到 Scala 2.13 的设计不可能做到这一点。有关更多信息,您可以阅读 github 上的拉取请求来实现这两个功能:
除非反引号,否则下划线不再是合法标识符 -https://github.com/scala/bug/issues/10384 https://github.com/scala/bug/issues/10384
使提取器模式为 null 安全 -https://github.com/scala/scala/pull/6485 https://github.com/scala/scala/pull/6485
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)