我试图弄清楚如何匹配Rust中的字符串。
我最初尝试这样匹配,但我发现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对象,因为我找不到一个函数来将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中匹配字符串?
你可以使用as_str()方法将字符串转换为&str,然后匹配&str值,如下所示:
fn main() {
let stringthing = String::from("c");
match stringthing.as_str() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("other"),
}
}
或者你可以将String值绑定到一个变量,然后像这样匹配变量:
fn main() {
let stringthing = String::from("c");
match stringthing {
ref x if x == "a" => println!("0"),
ref x if x == "b" => println!("1"),
ref x if x == "c" => println!("2"),
_ => println!("other"),
}
}
或者你可以使用==操作符将String值与字符串字面值进行比较,如下所示:
fn main() {
let stringthing = String::from("c");
if stringthing == "a" {
println!("0");
} else if stringthing == "b" {
println!("1");
} else if stringthing == "c" {
println!("2");
} else {
println!("other");
}
}
你可以使用as_str()方法将字符串转换为&str,然后匹配&str值,如下所示:
fn main() {
let stringthing = String::from("c");
match stringthing.as_str() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("other"),
}
}
或者你可以将String值绑定到一个变量,然后像这样匹配变量:
fn main() {
let stringthing = String::from("c");
match stringthing {
ref x if x == "a" => println!("0"),
ref x if x == "b" => println!("1"),
ref x if x == "c" => println!("2"),
_ => println!("other"),
}
}
或者你可以使用==操作符将String值与字符串字面值进行比较,如下所示:
fn main() {
let stringthing = String::from("c");
if stringthing == "a" {
println!("0");
} else if stringthing == "b" {
println!("1");
} else if stringthing == "c" {
println!("2");
} else {
println!("other");
}
}