5
我有一個while let
循環遍歷Result
的迭代器並使用模式匹配;它越過迭代,直到它擊中Err
或Ok
的值是一個空字符串:在'while let'中可以使用模式匹配的警衛嗎?
while let Some(Ok(a)) = some_iterator.next() {
if a == "" {
break;
}
// ...
}
此代碼工作正常。但是,我認爲if
聲明看起來很醜,可能不是慣用的Rust。在match
陳述,守衛在模式匹配使用,像這樣:
match foo {
Some(Ok(a)) if a != "" => bar(a)
// ...
}
這將是理想的我while let
環,雖然模式匹配使用似乎沒有支持它,導致一個語法錯誤:
while let Some(Ok(a)) = some_iterator.next() if a != "" { // <-- Syntax error
// ...
}
有沒有在while let
的條件下使用這樣的警衛的方法嗎?如果沒有,如果找到空字符串,是否有更好的方法來打破循環?
*可能不是慣用的Rust * - FWIW,我已經寫過這樣的代碼;對我來說並不壞。 – Shepmaster
我鼓勵回答者專注於回答*主要問題(「讓我們一起讓步」的警衛)。 OP [也許應該問另一個問題](http://meta.stackexchange.com/q/39223/281829)爲「有更好的方法」方面。 – Shepmaster