【发布时间】:2015-04-09 20:55:45
【问题描述】:
ThisRust 教程很好地解释了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,带来了很大的不同。 -
我不敢相信,我怎么会错过...谢谢!