如何将结构与字符串成员匹配

How to match struct with String members

我正在尝试匹配包含字符串成员的结构。我发现这会让我在下面感到困惑,我该如何操作才能避免呢?我知道使用 if...else... 可以解决问题,我如何使用 match 才有意义?

#[derive(Debug, PartialEq)]
struct UserData{
    name: String,
    id: u64,
}

fn some_test(){
    let mud2 = UserData{
        name: String::from("name two"),
        id: 77,
    };

    let name_string = String::from("name one");

    //***attention: the name_string below is regarded as a new variables, so the first arm will match any value of a UserData
    match mud2{
        //It's something may confuse!!!
        UserData{name: name_string, id} => println!("{}", id),
        UserData{name, id: 77} => println!("{}", name),
        UserData{name, id} => println!("{}-{}", name, id),
    }
}

这是 match guard:

的完美用例
match mud2{
    UserData{name, id} if name == name_string => println!("{}", id),
    UserData{name, id: 77} => println!("{}", name),
    UserData{name, id} => println!("{}-{}", name, id),
}