Scala 如何使用非通用 LazyList 的模式匹配?
Scala How to use pattern matching with a non generic LazyList?
在 Scala 2.13 中,我遇到了使用运算符 #::
进行模式匹配的问题,它在使用时显示错误 Cannot resolve method #::.unapply
,如下所示:
def exampleFunction(lazyList: LazyList[Int]):Unit =
lazyList match {
case LazyList() => println("End")
case head #:: tail => println(head); exampleFunction(tail) // Cannot resolve method #::.unapply
}
exampleFunction(LazyList(1,2,3,4,5,6,7,8))
当 LazyList 是泛型时,运算符确实按预期工作:
def exampleFunction[A](lazyList: LazyList[A]):Unit =
lazyList match {
case LazyList() => println("End")
case head #:: tail => println(head); exampleFunction(tail)
}
exampleFunction(LazyList(1,2,3,4,5,6,7,8)) // output: 1 2 3 4 5 6 7 8 End
为什么会出现这个问题,有没有办法解决它?
如果您使用的是 IntelliJ,这可能是由于编辑器中的错误突出显示错误 SCL-15834: Highlighting error on case matching using operator #:: In other words, this is a false positive where the code compiles successfully however IntelliJ's custom 错误突出显示过程错误地识别了问题。提供显式导入
import scala.collection.immutable.LazyList.#::
似乎让编辑器错误突出显示很高兴,但是导入应该不是必需的。很少有其他尝试的建议
File | Invlidate Caches
- 从项目的根目录
rm -fr .idea
然后重新导入项目
- 更新到最前沿的 Scala 插件版本:
Preferences | Languages & Frameworks | Scala | Updates | Update channel | Nightly Builds
- 在
Registry...
内启用实验标志 scala.highlighting.compiler.errors.in.editor
在 Scala 2.13 中,我遇到了使用运算符 #::
进行模式匹配的问题,它在使用时显示错误 Cannot resolve method #::.unapply
,如下所示:
def exampleFunction(lazyList: LazyList[Int]):Unit =
lazyList match {
case LazyList() => println("End")
case head #:: tail => println(head); exampleFunction(tail) // Cannot resolve method #::.unapply
}
exampleFunction(LazyList(1,2,3,4,5,6,7,8))
当 LazyList 是泛型时,运算符确实按预期工作:
def exampleFunction[A](lazyList: LazyList[A]):Unit =
lazyList match {
case LazyList() => println("End")
case head #:: tail => println(head); exampleFunction(tail)
}
exampleFunction(LazyList(1,2,3,4,5,6,7,8)) // output: 1 2 3 4 5 6 7 8 End
为什么会出现这个问题,有没有办法解决它?
如果您使用的是 IntelliJ,这可能是由于编辑器中的错误突出显示错误 SCL-15834: Highlighting error on case matching using operator #:: In other words, this is a false positive where the code compiles successfully however IntelliJ's custom 错误突出显示过程错误地识别了问题。提供显式导入
import scala.collection.immutable.LazyList.#::
似乎让编辑器错误突出显示很高兴,但是导入应该不是必需的。很少有其他尝试的建议
File | Invlidate Caches
- 从项目的根目录
rm -fr .idea
然后重新导入项目 - 更新到最前沿的 Scala 插件版本:
Preferences | Languages & Frameworks | Scala | Updates | Update channel | Nightly Builds
- 在
Registry...
内启用实验标志scala.highlighting.compiler.errors.in.editor