template support strings ecmascript string match rust

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!"), }



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.