在地图中满足条件时从函数返回

Syn*_*ose 4 rust

有没有一种方法可以使用 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 */ }
            });                                                                                     
    }
}
Run Code Online (Sandbox Code Playgroud)

这是可能的吗?或者我应该简单地迭代chars()自己并在到达时返回错误None?只是想知道是否有一种简单的方法可以map从函数中跳出并返回

She*_*ter 7

这里有两个关键信息会很有用:

  1. 迭代器一次操作一项,因此迭代器适配器只会在某些东西消耗迭代器时执行。
  2. FromIterator(which powers 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);
}
Run Code Online (Sandbox Code Playgroud)

如果println!mapbody中插入a ,可以看到 200 之后没有处理任何数字。