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