在地图中满足条件时从功能返回

时间:2015-07-19 23:40:52

标签: 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 */ }
            });                                                                                     
    }
}

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

1 个答案:

答案 0 :(得分:3)

这里有两个关键信息:

  1. 迭代器一次操作一个项目,因此迭代器适配器只会在消耗迭代器时执行。
  2. FromIterator(权力Iterator::collect)也为Result实施。
  3. 由于您没有提供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之后没有处理任何数字。