gpt4 book ai didi

while-loop - 是否可以在 `while let` 中使用模式匹配守卫?

转载 作者:行者123 更新时间:2023-11-29 07:48:44 25 4
gpt4 key购买 nike

我有一个 while let 循环,它遍历 Result 的迭代器并使用模式匹配;它遍历迭代器,直到遇到 ErrOk 的值为空字符串:

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 的条件下,有没有办法像这样使用守卫?如果不是,是否有更好的方法在发现空字符串时跳出循环?

最佳答案

不,while letif let 模式不能有守卫。已经有一些关于更改它的讨论(例如 here ),但尚未做出任何决定。

关于备选方案,我认为您的版本非常清晰,我想不出任何真正改进的方法。

关于while-loop - 是否可以在 `while let` 中使用模式匹配守卫?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40269242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com