私はwhile let
のループを持っていて、それはResult
のイテレータを通り、パターンマッチングを使います。`while let`でパターンマッチガードを使用することはできますか?
while let Some(Ok(a)) = some_iterator.next() {
if a == "" {
break;
}
// ...
}
このコードは正常に動作します:それはヒットするまで、それは、Err
またはOk
の値が空の文字列であるイテレータの上に行きます。しかし、私はif
のステートメントは醜いと思うし、おそらく慣用錆はありません。パターンマッチングは、構文エラーを引き起こし、それをサポートするために存在していないよう採用が
match foo {
Some(Ok(a)) if a != "" => bar(a)
// ...
}
これは、私のwhile let
ループのための理想的な次のようになりますので、同じようmatch
文では、警備員は、パターンマッチングに使用することができます。
while let Some(Ok(a)) = some_iterator.next() if a != "" { // <-- Syntax error
// ...
}
while let
の条件で、このようなガードを使用する方法はありますか。そうでない場合は、空の文字列が見つかった場合、ループから抜け出すためのよりよい方法がありますか?
*おそらく慣用錆ではありません* - FWIW、私はそのようなコードを書いています。私には悪く見えません。 – Shepmaster
私は、回答者が*プライマリ*の質問に答えることに集中することを奨励したいと思います( 'while let'の警備員)。 OPは[もっと良い方法はありますか?]という点については、おそらく別の質問をするべきです(http://meta.stackexchange.com/q/39223/281829)。 – Shepmaster