Rust filter () 내부의 오류를 어떻게 처리합니까?

Aug 31 2020

Err결과를 반환 할 수있는 필터 함수를 사용 하고 포함하는 함수까지 버블 링 하고 싶습니다 .

mycoll.into_iter()
  .filter(|el| {
    if el == "bad" {
      Err(MyError)
    } else {
      Ok(el < "foo")
    }
  })

이 유형의 경우를 처리하는 방법에 대한 좋은 설명을 찾았습니다 map()(사용 .collect::<Result<...>>()). Iterator :: map이 Result :: Err을 반환 할 때 반복을 중지하고 오류를 반환하는 방법은 무엇입니까? 하지만 비슷한 솔루션을 얻을 수 없습니다 filter().

여기서 관용적 해결책은 무엇입니까?

답변

4 DanielWagner-Hall Aug 31 2020 at 06:09

나는 아마도 filter_map. 귀하의 예는 다음과 같습니다.

mycoll.into_iter()
  .filter_map(|el| {
    if el == "bad" {
      Some(Err(MyError))
    } else if el < "foo" {
      Some(Ok(el))
    } else {
      None
    }
  })