我正在Vec
进行映射,以使每个项目成为Result
。如果任何元素是Err
,那么我想提前终止并生成Err
,否则我想生成包含Ok
的{{1}}。
Vec<i32>
在Haskell中,我可以使用let v = (1..10)
.map( |n| {
if n % 4 == 0 {
Err("Too fourish!")
}
else {
Ok(n)
}
}).collect::<Vec<_>>();
println!("{:?}", v);
。是否有相同的内置Rust功能?
答案 0 :(得分:5)
您可以使用FromIterator
的{{1}}实现:
Result
输出:
fn main() {
let v = (1..10)
.map( |n| {
if n % 4 == 0 {
Err("Too fourish!")
}
else {
Ok(n)
}
}).collect::<Result<Vec<_>, _>>();
println!("{:?}", v);
let v = (1..10)
.map( |n| {
if n % 4 == 4 { // impossible
Err("Too fourish!")
}
else {
Ok(n)
}
}).collect::<Result<Vec<_>, _>>();
println!("{:?}", v);
}
更多信息:https://doc.rust-lang.org/std/result/enum.Result.html#implementations