如何将结构与字符串成员匹配
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),
}
我正在尝试匹配包含字符串成员的结构。我发现这会让我在下面感到困惑,我该如何操作才能避免呢?我知道使用 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),
}