scala – 解析视图失败
发布时间:2020-12-16 09:58:32 所属栏目:安全 来源:网络整理
导读:我在Seq [Int]上定义了以下diff函数,它使用视图来避免复制数据: object viewDiff { def main(args: Array[String]){ val values = 1 to 10 println("diff="+diffInt(values).toList) } def diffInt(seq: Seq[Int]): Seq[Int] = { val v1 = seq.view(0,seq.s
我在Seq [Int]上定义了以下diff函数,它使用视图来避免复制数据:
object viewDiff { def main(args: Array[String]){ val values = 1 to 10 println("diff="+diffInt(values).toList) } def diffInt(seq: Seq[Int]): Seq[Int] = { val v1 = seq.view(0,seq.size-1) val v2 = seq.view(1,seq.size) (v2,v1).zipped.map(_-_) } } 此代码因UnsupportedOperationException而失败.如果我使用切片而不是视图它可以工作. 有谁能解释一下? [用scala 2.10.5和2.11.6测试] 编辑 我选择了Carlos’s answer,因为它是(第一个)问题的正确解释.但是,som-snytt’s answer更详细,并提供了一个使用压缩对象视图的简单解决方案. 我还发布了适用于这种特定情况的very simple solution . 注意 在上面的代码中,我也在计算seq导数的算法上犯了一个错误.最后一行应该是:seq.head:(v2,v1).zipped.map(_-_) 解决方法
在代码中使用seq.view时,您正在创建无法压缩的SeqView [Int,Seq [Int]]对象,因为它不支持TraversableView.Builder.result.但你可以使用这样的东西:
def diffInt(seq: Seq[Int]) = { val v1 = seq.view(0,seq.size-1) val v2 = seq.view(1,seq.size) (v2.toList,v1.toList).zipped.map { case (x1: Int,y1: Int) => x1-y1 case _ => 0 } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |