在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 #::而引起的。换句话说,这是一个误报,代码成功编译,但是IntelliJ的custom错误突出显示过程错误地识别了问题。提供明确的导入
import scala.collection.immutable.LazyList.#::
似乎使编辑器错误突出显示为高兴,但是导入不是必需的。很少有其他建议可以尝试
File | Invlidate Caches
rm -fr .idea
,然后重新导入项目Preferences | Languages & Frameworks | Scala | Updates | Update channel | Nightly Builds
Registry...
内启用实验标记scala.highlighting.compiler.errors.in.editor