risc-v中文社区

 找回密码
 立即注册
查看: 1192|回复: 0

[经验] scala中foldLeft源码分析及实验

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-8-13 15:48:54 | 显示全部楼层 |阅读模式
今天看到有一个chisel代码中用到了aggregate,在aggregate中用到了foldLeft,
先看看foldLeft的源码:
在TraversableOnce这个trait中:
def foldLeft[B](z:B)(opB,A)=>B):B = {
  val result = z  //result是最终要返回的结果,初值为z
  //遍历,因为op是一个有二个参数且返回类型为B的方法,所以result = op(result,x)就表示
  //将上次的结果值(初始值为用户输入的参数z)和每次遍历取出来的元素值,通过op方法处理
  //然后将op处理的结果值当作下次op要处理的result
  //通俗来讲,就是每次取一个集合中的元素,与上次op处理之后的返回值再次叠代处理
  this foreach(x => result = op(result,x))
  //最终将最后的op处理的返回值返回给调用者
  result
}
用图展示就是:

实验代码如下:
val l = List(1,3,2,6,5)
val r = l.foldLeft(1)((b:Int,i:Int) => {
      b+i
    })
println("r=%d".format(r))
显示:
r=18

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-29 11:32 , Processed in 0.017995 second(s), 18 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表