Lui*_*hys 10 scala pattern-matching
试图生成一个显示素数因子多样性的元组列表...这个想法是将排序列表中的每个整数与元组中的第一个值匹配,使用第二个值进行计数.可能更容易做到takeWhile,但是,好吧.不幸的是我的解决方案无法编译
def primeFactorMultiplicity (primeFactors: List[Int]) = {
primeFactors.foldRight (List[(Int, Int)]()) ((a, b) => (a, b) match {
case (_, Nil) => (a, 1) :: b
case (b.head._1, _) => (a, b.head._2 + 1) :: b.tail
case _ => (a, 1) :: b
})
}
Run Code Online (Sandbox Code Playgroud)
它说"错误:需要稳定的标识符,但发现了b.head._1".但是将第二case行更改为以下内容可以正常工作:
case (i, _) if (i == b.head._1) => (a, b.head._2 + 1) :: b.tail
Run Code Online (Sandbox Code Playgroud)
为什么会这样,为什么编译器无法应对这样一个简单的修复?
gee*_*aur 14
模式中的变量捕获该位置的值; 它并没有做一个比较.如果语法完全有效,那么结果就是将值a放入b.head._1,覆盖当前值.这样做的目的是让你使用一个模式从复杂的结构中拉出一些东西.
| 归档时间: |
|
| 查看次数: |
7257 次 |
| 最近记录: |