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?
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.as_str
aú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_str
método a partir de Rust 1.7.0:fuente
as_slice
está en desuso, ahora debería usar el rasgo en sustd::convert::AsRef
lugar: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::String
std::ops::Deref
fuente
Puedes combinar en un corte de cuerda.
fuente
.as_ref()
o.as_str()
, ambos no tomaron posesión.Puedes probar:
fuente
&*stringthing
significa y qué hace.