为未使用的变量使用占位符时获取 MatchError
Getting MatchError when using a placeholder for an unused variable
使用 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
有什么原因吗?
- Underscore is no longer a legal identifier unless backquoted (bug#10384)
val _ =
is now a pattern match (and discards the value without incurring a warning)
- Make extractor patterns null safe. (#6485)
null
is treated as no match.
结合两者时,我们可以看到 Scala 2.13 的设计无法做到这一点。有关更多信息,您可以在 github 实现这两个功能的拉取请求中阅读:
下划线不再是合法标识符,除非反引号 - https://github.com/scala/bug/issues/10384
使提取器模式为 null 安全 - https://github.com/scala/scala/pull/6485
使用 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
有什么原因吗?
- Underscore is no longer a legal identifier unless backquoted (bug#10384)
val _ =
is now a pattern match (and discards the value without incurring a warning)- Make extractor patterns null safe. (#6485)
null
is treated as no match.
结合两者时,我们可以看到 Scala 2.13 的设计无法做到这一点。有关更多信息,您可以在 github 实现这两个功能的拉取请求中阅读:
下划线不再是合法标识符,除非反引号 - https://github.com/scala/bug/issues/10384
使提取器模式为 null 安全 - https://github.com/scala/scala/pull/6485