下面是我的一些代码:
fn my_func(i: i32) -> Result<i32, String> {
match i {
42 => Ok(113),
_ => Err("Can only use 42".to_string())
}
}
fn main() {
let myvec = [1, 2, 42];
if myvec.iter().any(|i| my_func(*i).is_ok()) {
println!("something was ok");
} else {
println!("nothing was ok");
}
}
我不想打印println!("something was ok");
,而想打印哪个元素是OK。
但是如果我赋值给any
中的一个变量,那么它在println!
语句中就不可见了。
在这种情况下,所需输出为:
something was ok: 42
2条答案
按热度按时间mjqavswn1#
因为您需要没有出错的元素,所以使用
Iterator::find
:playground
y1aodyip2#
Iterator::any
不能返回值。它只返回true或false。any
的变量Iterator::find_map
* 不a返回值。将函数应用于
iterator
的元素,并返回第一个非none结果。iter.find_map(f)
等于iter.filter_map(f).next()
。Option<B>
实际上只是一个布尔值,在“true”情况下包含额外信息,因此我们将使用这些额外信息返回一个有用的值。Result::ok
获取Result
并将其Map到Option
。Ok
变为Some
,并且任何Err
变为None
(实际错误信息被丢弃)。