我正在尝试查找如何在Rust中匹配字符串String
。
最初我是这样匹配的,但我发现Rust无法将 std::string::String
隐式转换为 &str
。
fn main() {
let stringthing = String::from("c");
match stringthing {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
}
}
这里出现了错误:
error[E0308]: mismatched types
--> src/main.rs:4:9
|
4 | "a" => println!("0"),
| ^^^ expected struct `std::string::String`, found reference
|
= note: expected type `std::string::String`
found type `&'static str`
因为找不到将String
类型转换为&str
类型的函数,所以我尝试构建新的String
对象。
fn main() {
let stringthing = String::from("c");
match stringthing {
String::from("a") => println!("0"),
String::from("b") => println!("1"),
String::from("c") => println!("2"),
}
}
这让我连续出现了3次以下错误:
error[E0164]: `String::from` does not name a tuple variant or a tuple struct
--> src/main.rs:4:9
|
4 | String::from("a") => return 0,
| ^^^^^^^^^^^^^^^^^ not a tuple variant or struct
如何在Rust中实际匹配String
?
stringthing.as_str()
可能是所有答案中最直接的;我不喜欢as_ref
,因为它过于泛化,可能会导致错误,并且不够明确,不完全清楚as_ref()
将会是一个&str
,而as_str
则更加简单易懂。 - Zorfas_str
还不存在时,答案已被接受。我改变了被接受的答案,但感谢所有回答这个问题的人! - Jeroen