是否可以对字符串字段进行模式匹配?我无法使此代码正常工作。
struct Foo {
x: int,
y: int,
str: String
}
pub fn main() {
let a = Foo { x: 1, y: 2 , str: "Hi".to_string()};
match a {
Foo { x: x, y: y, str: "Hi".to_string() } => println!("Found {}, {}", x, y),
_ => {}
}
}
给出此错误:
<anon>:10:36: 10:37 error: expected one of `,` or `...`, found `.`
<anon>:10 Foo { x: x, y: y, str: "Hi".to_string() } => println!("Found {}, {}", x, y),
^
match
格可能不包含像"Hi".to_string()
这样的表达式,只能包含常量(例如3
,"Hi
“)或变量(例如x
)。要在String
字段上进行匹配,您需要使用图案守卫:match a {
Foo { x: x, y: y, str: ref str } if str == &"Hi" =>
println!("Found {}, {}", x, y),
_ => {}
}
if str == &"Hi"
是用于检查String
值的图案保护器。请注意,模式防护迫使我们使用ref
捕获对String
的引用,而不是将其移出结构。