support - template string javascript html
¿Cómo hacer coincidir una cadena con cadenas literales en Rust? (4)
Nota del editor: Esta respuesta se refiere a una versión de Rust anterior a la versión 1.0 y no funciona en Rust 1.0.
Puede coincidir en un segmento de cadena.
match stringthing.as_slice() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
Estoy intentando descubrir cómo hacer coincidir una String
en Rust.
Intenté inicialmente hacer coincidir esto, pero descubrí que Rust no puede convertir 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 objetos String
, ya que no pude encontrar una función para convertir un String
en un &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 emparejar String
s en Rust?
Puedes hacer algo como esto:
match &stringthing[..] {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
También hay un método as_str
partir de Rust 1.7.0:
match stringthing.as_str() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
También podrías hacer
match &stringthing as &str {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
Ver:
as_slice
está en desuso, ahora debería usar el rasgo std::convert::AsRef
en std::convert::AsRef
lugar:
match stringthing.as_ref() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
Tenga en cuenta que también debe manejar explícitamente el caso catch-all.