kam*_*mov 5 functional-programming scala list pattern-matching lazy-evaluation
在 Scala 2.13 中,我遇到了使用 operator 进行模式匹配的问题,使用时#::会显示错误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))
Run Code Online (Sandbox Code Playgroud)
当 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
Run Code Online (Sandbox Code Playgroud)
为什么会出现这个问题,有没有办法解决?
如果您使用 IntelliJ,这可能是由于编辑器内错误突出显示错误SCL-15834:使用运算符 #: 匹配大小写时突出显示错误:换句话说,这是代码编译成功的误报,但 IntelliJ 的自定义错误突出显示过程错误地识别了问题。提供显式导入
import scala.collection.immutable.LazyList.#::
Run Code Online (Sandbox Code Playgroud)
似乎让编辑器错误突出显示很高兴,但是导入应该不是必需的。很少有其他建议可以尝试
File | Invlidate Cachesrm -fr .idea然后重新导入项目Preferences | Languages & Frameworks | Scala | Updates | Update channel | Nightly BuildsRegistry...在启用实验标志内scala.highlighting.compiler.errors.in.editor| 归档时间: |
|
| 查看次数: |
619 次 |
| 最近记录: |