我想检查字符串是否包含'$'以及'$'后面是否有内容:
我试过这段代码:
fn test(s: String) {
match s.find('$') {
None | (Some(pos) if pos == s.len() - 1) => {
expr1();
}
_ => { expr2(); }
}
}
但它没有编译:
error: expected one of `)` or `,`, found `if`
是否无法将None
和Some
合并到一个匹配臂中?
如果是这样,有没有一种简单的方法可以不复制expr1()
,除非将其移动到单独的函数中?
答案 0 :(得分:7)
不可能让匹配保护(if
thingy)仅适用于一种模式替代(由|
符号分隔的事物)。每只手臂只有一个防护装置,它适用于该手臂的所有模式。
但是,针对您的具体问题有很多解决方案。例如:
if s.find('$').map(|i| i != s.len() - 1).unwrap_or(false) {
expr2();
} else {
expr1();
}