如何在Rust中匹配string文字?
我试图弄清楚如何匹配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"), } }
然后我试图构造新的String
对象,因为我找不到一个将String
转换为&str
的函数。
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
?
as_slice
已被弃用,您现在应该使用trait std::convert::AsRef
来代替:
match stringthing.as_ref() { "a" => println!("0"), "b" => println!("1"), "c" => println!("2"), _ => println!("something else!"), }
请注意,您还必须明确处理全部情况。
这个答案属于老版本的锈,不再准确
你可以匹配一个string片。
match stringthing.as_slice() { "a" => println!("0"), "b" => println!("1"), "c" => println!("2"), _ => println!("something else!"), }
你可以做这样的事情:
match &stringthing[..] { "a" => println!("0"), "b" => println!("1"), "c" => println!("2"), _ => println!("something else!"), }
从Rust 1.7.0开始,还有一个as_str
方法。
你也可以做
match &stringthing as &str { "a" => println!("0"), "b" => println!("1"), "c" => println!("2"), _ => println!("something else!"), }
看到:
-
std::string::String
-
std::ops::Deref
- Deref强制