加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

模式匹配期间需要稳定的标识符? (斯卡拉)

发布时间:2020-12-16 19:04:02 所属栏目:安全 来源:网络整理
导读:尝试生成一个显示素因子多重性的元组列表…这个想法是将排序列表中的每个整数与元组中的第一个值进行匹配,使用第二个值进行计数.可能可以更容易地用takeWhile做,但呃.不幸的是我的解决方案不会编译 def primeFactorMultiplicity (primeFactors: List[Int]) =
尝试生成一个显示素因子多重性的元组列表…这个想法是将排序列表中的每个整数与元组中的第一个值进行匹配,使用第二个值进行计数.可能可以更容易地用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
    })
  }

它说“错误:需要稳定的标识符,但是找到了b.head._1”.但是将第二个案例行更改为以下工作正常:

case (i,_) if (i == b.head._1) => (a,b.head._2 + 1) :: b.tail

为什么是这样,为什么编译器不能应对如果有这样一个简单的修复?

解决方法

模式中的变量捕获该位置的值;它不做比较.如果语法完全正常,结果将把a的值放在b.head._1中,覆盖当前值.这样做的目的是让你使用一个模式来从复杂的结构中拉出一些东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读