gpt4 book ai didi

rust - 是否有可能在同一个比赛臂中组合两种模式,一种是比赛后卫?

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

我想检查一个字符串是否包含“$”以及“$”之后是否有内容:

我试过这段代码:

fn test(s: String) {
match s.find('$') {
None | (Some(pos) if pos == s.len() - 1) => {
expr1();
}
_ => { expr2(); }
}
}

但它不编译:

error: expected one of `)` or `,`, found `if`

是否不可能将 NoneSome 组合在一个匹配臂中?

如果是这样,是否有一种简单的方法可以避免重复 expr1(),除非将它移到一个单独的函数中?

最佳答案

不可能让匹配守卫(if 东西)只应用于一种模式选择(由 | 分隔的东西)符号)。每只 ARM 只有一名比赛后卫,它适用于该 ARM 的所有模式。

但是,对于您的特定问题,有许多解决方案。例如:

if s.find('$').map(|i| i != s.len() - 1).unwrap_or(false) {
expr2();
} else {
expr1();
}

关于rust - 是否有可能在同一个比赛臂中组合两种模式,一种是比赛后卫?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42355502/

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