I'm trying to figure out how to match a String
in Rust.
I initially tried matching like this, but I figured out Rust cannot implicitly cast from std::string::String
to &str
.
fn main() {
let stringthing = String::from("c");
match stringthing {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
}
}
This has the error:
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`
I then tried to construct new String
objects, as I could not find a function to cast a String
to a &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"),
}
}
This gave me the following error 3 times:
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
How to actually match String
s in Rust?
stringthing.as_str()
is probably the most straightforward of all the answers; I don't likeas_ref
because it's unnecessarily general, which can lead to bugs, and not as explicit, it isn't completely clear thatas_ref()
is going to be a&str
,as_str
is simple and clear. – Zorfas_str
did not exist yet. I changed the accepted answer but thank all people who answered this question! – Jeroen