将结构与字符串匹配的模式
Pattern matching a struct with a 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),
^
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
的引用,而不是将其移出结构。
是否可以对字符串字段进行模式匹配?我无法使此代码正常工作。
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
的引用,而不是将其移出结构。