SeS*_*esa 1 pattern-matching rust
我正在尝试匹配从解构的枚举变体构造的元组,如下所示:
enum Enum {
Var {
field1: Option<String>,
field2: Option<String>
}
}
let var = Enum::Var {
field1: Some("aaa".to_string()),
field2: None
}
match var {
Enum::Var {field1, field2} => {
match (field1, field2) {
(Some("aaa".to_string()), None) => (),
_ => panic!()
}
}
_ => panic!()
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误消息
error: expected one of `)`, `,`, `...`, `..=`, `..`, or `|`, found `.`
--> src/parser/test_admonitions.rs:61:22
|
61 | (Some("aaa".to_string()), None) => {}
| ^
| |
| expected one of `)`, `,`, `...`, `..=`, `..`, or `|`
| help: missing `,`
error: aborting due to 1 previous error
Run Code Online (Sandbox Code Playgroud)
为什么是这样?为什么我不能匹配元组?
为什么我不能匹配元组?
您可以匹配元组。
你不能做的是匹配任意表达式,模式是一种受限制的语法。
检查元组的第一个元素是否"aaa"(或更普遍地匹配非平凡条件)的正确方法是使用模式保护:
match (field1, field2) {
(Some(a), None) if a == "aaa" => (),
_ => panic!()
}
Run Code Online (Sandbox Code Playgroud)
此外,不需要通过元组进行间接访问,模式具有“深度”,因此您可以直接在结构上执行相同的操作:
match var {
Enum::Var {field1: Some(a), field2: None} if a == "aaa" => {
}
_ => panic!()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |