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来捕获对字符串的引用,而不是将其移出结构