这个 Rust 教程很好地解释了 `fold()` 机制,并提供了以下示例代码:这里。
我猜这可能是一个与引用相关的错误,所以我将其更改为
let sum = (1..4).fold(0, |sum, x| sum + x);
按预期工作。
我想在一个向量上运行它,因此基于这个例子,我首先写了这个:
let sum: u32 = vec![1,2,3,4,5,6].iter().fold(0, |sum, val| sum += val);
出现了错误:
error: binary assignment operation `+=` cannot be applied to types `_` and `&u32` [E0368]
let sum = ratings.values().fold(0, |sum, val| sum += val);
^~~~~~~~~~
我猜这可能是一个与引用相关的错误,所以我将其更改为
fold(0, |sum, &val| sum += val)
,结果为:error: mismatched types:
expected `u32`,
found `()`
嗯,闭包可能有问题?使用{sum += x; sum }
,我得到了
binary assignment operation `+=` cannot be applied to types `_` and `&u32`
经过进一步的尝试和错误,将mut
添加到sum
中成功了:
let sum = vec![1,2,3,4,5,6].iter().fold(0, |mut sum, &x| {sum += x; sum});
有没有人能解释一下为什么 fold()
对向量的处理与教程有很大不同?或者有更好的处理方法吗?
参考资料,我正在使用 Rust beta 版本,日期为 2015-04-02。
sum + x
替换为sum += x
引入了一个很大的差异。 - Levans