Estoy tratando de descubrir cómo hacer coincidir un String
Rust.
Inicialmente intenté combinar de esta manera, pero descubrí que Rust no puede lanzar implícitamente de std::string::String
a &str
.
fn main() {
let stringthing = String::from("c");
match stringthing {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
}
}
Esto tiene el 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`
Luego traté de construir nuevos String
objetos, ya que no pude encontrar una función para convertir String
a 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"),
}
}
Esto me dio el siguiente error 3 veces:
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
¿Cómo hacer coincidir String
s en Rust?
as_str
aún no existía. ¡Cambié la respuesta aceptada pero gracias a todas las personas que respondieron esta pregunta!
stringthing.as_str()
es probablemente la más directa de todas las respuestas; No me gustaas_ref
porque es innecesariamente general, lo que puede conducir a errores, y no tan explícito, no está completamente claro queas_ref()
va a ser un&str
,as_str
es simple y claro.