Estoy tratando de descubrir cómo hacer coincidir un StringRust.
Inicialmente intenté combinar de esta manera, pero descubrí que Rust no puede lanzar implícitamente de std::string::Stringa &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 Stringobjetos, ya que no pude encontrar una función para convertir Stringa 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 Strings en Rust?

stringthing.as_str()es probablemente la más directa de todas las respuestas; No me gustaas_refporque 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_stres simple y claro.as_straún no existía. ¡Cambié la respuesta aceptada pero gracias a todas las personas que respondieron esta pregunta!Respuestas:
Puedes hacer algo como esto:
También hay un
as_strmétodo a partir de Rust 1.7.0:fuente
as_sliceestá en desuso, ahora debería usar el rasgo en sustd::convert::AsReflugar:Tenga en cuenta que también debe manejar explícitamente el caso general.
fuente
trim()función. Solo usandoas_ref()no coincide con la cadena.trim()elimina. Esto es bueno para defenderse para que coincida con la entrada del usuario.También podrías hacer
Ver:
std::string::Stringstd::ops::Dereffuente
Puedes combinar en un corte de cuerda.
fuente
.as_ref()o.as_str(), ambos no tomaron posesión.Puedes probar:
fuente
&*stringthingsignifica y qué hace.