2015-02-17 70 views
5

之前更新到最新版本锈下面用来工作:将结果转换为选项的干净方式是什么?

let parsed_value: Vec<usize> = val.iter() 
            .filter_map(|e| e.parse::<usize>()) 
            .collect(); 

不过,现在的解析方法返回一个Result类型,而不是一个Option

我可以创建一个Option通过一个条件,但有没有更好/更清洁的方式?

回答

8

是!使用Result::ok。类型增加了净度:

let res: Result<u8,()> = Ok(42); 
let opt: Option<u8> = res.ok(); 
println!("{:?}", opt); 

但是,如果你有Result的Iterator,可以collect它们合并到一个大Result。这种情况不太明显,但您可以查看FromIterator的实现器以获取collect可用项目的完整列表。

let strs = &["1", "2", "3", "4"]; 
let nums: Result<Vec<u8>, _> = strs.iter().map(|s| s.parse()).collect(); 
println!("{:?}", nums); 

当然,您可以将一个大的结果转换为一个选项,如第一个示例所示。

相关问题