【发布时间】:2017-03-09 05:32:22
【问题描述】:
我有一个while let 循环,它遍历Result 的迭代器并使用模式匹配;它遍历迭代器,直到遇到Err 或Ok 的值为空字符串:
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,我写过这样的代码;对我来说似乎并不坏。
-
我鼓励回答者专注于回答主要问题(
while let中的警卫)。 OP should probably ask another question 用于“有没有更好的方法”方面。
标签: while-loop pattern-matching rust