这个 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) 编者注:该问题的示例来自1.0之前的Rust版本,并引用了Rust中不再存在的类型和方法。答案仍然包含有价值的信息。
以下代码
let mut numbers = new_serial.as_bytes().iter().map(|&x| (x - 48));
let sum = numbers.sum();
Run Code Online (Sandbox Code Playgroud)
导致以下错误:
let mut numbers = new_serial.as_bytes().iter().map(|&x| (x - 48));
let sum = numbers.sum();
Run Code Online (Sandbox Code Playgroud)
对字节数组求和应该怎么做?
以下作品:
for byte in new_serial.as_bytes().iter() {
sum = sum + (byte - 48);
}
Run Code Online (Sandbox Code Playgroud)