是否可以对String字段进行模式匹配?我不能让这段代码工作。
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),
^
答案 0 :(得分:5)
match
个案可能不包含"Hi".to_string()
这样的表达式,只包含常量(例如3
,"Hi
&#34;)或变量(例如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
的引用,而不是将其移出结构。