Result
物品,例如:
let items: &[Result<&str, u32>] = &[Ok("foo"), Err(444), Ok("bar")];
我需要找到第一个值为
"bar"
的元素的索引。我的第一次尝试看起来像:
let bar_idx = items.iter()
.position(|item| item? == "bar")?;
这不起作用,因为闭包内有
?
运算符。
try_for_each
方法,如果返回 Err
,该方法会使整个集合失败,但是 position
没有这样的等价物,这就是我正在尝试做的。
如何实现此搜索?
take_while
:
let bar_idx = items.iter()
.take_while(|item| item.is_ok())
.position(|item| item.unwrap() == "foo")?;