我想重构一个函数并使用迭代器而不是 for 循环。我用下面要重构的演示代码举例说明了这个问题:
fn with_loop() -> bool {
let foo = [1, 2, 25, 4, 5];
let mut sum = 0;
for bar in foo {
if bar > 20 {return false;}
sum += bar;
}
sum > 10
}
我想做类似下面的事情,问题是我当然无法从关闭中返回。
fn functional_programming() -> bool {
let foo = [1, 2, 25, 4, 5];
let sum: i32 = foo
.into_iter()
.inspect(|bar_ptr| {
if *bar_ptr > 20 {
// functional_programming() returns false;
print!("I want to return false");
}
})
.sum();
sum > 10
}
一些我不想协商的额外限制:
.sum()
方法可以对Result
对象求和:
fn functional_programming() -> bool {
let foo = [1, 2, 25, 4, 5];
let sum = foo.iter()
.map(|i| if *i > 20 { Err(()) } else { Ok(*i) })
.sum::<Result<i64, _>>();
if let Ok(sum) = sum {
return sum > 10;
}
false
}