有没有办法可以使用map,如果满足某个条件,我可以返回错误?原因是我正在尝试为我的结构FromStr
实现特征BigNum
:
impl FromStr for BigNum {
fn from_str(s: &str) -> Result<BigNum, BigNum::Err> {
let filter_vec = t_num.chars().
map(|a| match a.to_digit(10) {
Some(x) => { x },
None => { /* return from function with Err */ }
});
}
}
这可能吗?或者我应该简单地遍历chars()
我自己并在到达None
时返回错误?只是想知道是否有一种简单的方法来突破map
并从函数返回
答案 0 :(得分:3)
这里有两个关键信息:
FromIterator
(权力Iterator::collect
)也为Result
实施。由于您没有提供MCVE,我编写了可以实际编译的示例代码:
fn foo(input: &[u8]) -> Result<Vec<u8>, ()> {
input.iter().map(|&i| {
if i > 127 {
Err(())
} else {
Ok(i + 1)
}
}).collect()
}
fn main() {
let a = foo(&[1,2,3,4]);
let b = foo(&[200,1,2,3]);
println!("{:?}", a);
println!("{:?}", b);
}
如果您在println!
正文中粘贴map
,则可以看到在200之后没有处理任何数字。