String 将结构与字符串匹配的模式
是否可以对字符串字段进行模式匹配?我不能让这个代码工作String 将结构与字符串匹配的模式,string,pattern-matching,rust,String,Pattern Matching,Rust,是否可以对字符串字段进行模式匹配?我不能让这个代码工作 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 {}, {}",
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),
_ => {}
}
}
给出此错误:
:10:36:10:37错误:应为“、”或“…”中的一个,已找到“”`
:10 Foo{x:x,y:y,str:Hi.to_string}=>println!找到{},{},x,y,
^
匹配案例可能不包含Hi.to_字符串之类的表达式,仅包含常量(如3、Hi)或变量(如x)。要匹配字符串字段,您需要使用模式保护:
match a {
Foo { x: x, y: y, str: ref str } if str == &"Hi" =>
println!("Found {}, {}", x, y),
_ => {}
}
if str==&Hi是检查字符串值的模式保护。请注意,模式保护强制我们使用ref来捕获对字符串的引用,而不是将其移出结构。匹配案例可能不包含Hi.to_String之类的表达式,仅包含常量(例如3、Hi)或变量(例如x)。要匹配字符串字段,您需要使用模式保护:
match a {
Foo { x: x, y: y, str: ref str } if str == &"Hi" =>
println!("Found {}, {}", x, y),
_ => {}
}
if str==&Hi是检查字符串值的模式保护。注意,模式保护迫使我们使用ref来捕获对字符串的引用,而不是将其移出结构