|
今天看到有一个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
|