这个 Rust教程fold()很好地解释了这个机制,这个代码如下:
let sum = (1..4).fold(0, |sum, x| sum + x);
Run Code Online (Sandbox Code Playgroud)
按预期工作.
我想在一个向量上运行它,所以基于这个例子,我首先写了这个:
let sum: u32 = vec![1,2,3,4,5,6].iter().fold(0, |sum, val| sum += val);
Run Code Online (Sandbox Code Playgroud)
哪个引起了错误:
error: binary assignment operation `+=` cannot be applied to types `_` and `&u32` [E0368]
let sum = ratings.values().fold(0, |sum, val| sum += val);
^~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
我猜这可能是由于某种原因引起的与引用相关的错误,因此我将其更改为fold(0, |sum, &val| sum += val),结果是
error: mismatched types:
expected `u32`,
found `()`
Run Code Online (Sandbox Code Playgroud)
嗯,关闭可能有些问题?使用{sum += x; sum },我得到了
binary assignment operation `+=` cannot be applied to …Run Code Online (Sandbox Code Playgroud)