Estou tentando descobrir como combinar um String
no Rust.
Inicialmente, tentei combinar dessa maneira, mas descobri que Rust não pode implicitamente lançar de std::string::String
para &str
.
fn main() {
let stringthing = String::from("c");
match stringthing {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
}
}
Este tem o erro:
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`
Tentei então construir novos String
objetos, pois não consegui encontrar uma função para converter a String
em 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"),
}
}
Isso me deu o seguinte erro 3 vezes:
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
Como realmente combinar String
s em Rust?
stringthing.as_str()
é provavelmente a mais direta de todas as respostas; Eu não gostoas_ref
porque é desnecessariamente geral, o que pode levar a erros, e não tão explícito, não está completamente claro queas_ref()
será um&str
,as_str
é simples e claro.as_str
ainda não existia. Alterei a resposta aceita, mas agradeço a todas as pessoas que responderam a essa pergunta!Respostas:
Você pode fazer algo assim:
Também existe um
as_str
método a partir do Rust 1.7.0:fonte
as_slice
foi descontinuado, agora você deve usar a característicastd::convert::AsRef
:Observe que você também precisa lidar explicitamente com o caso abrangente.
fonte
trim()
função Apenas usaras_ref()
não corresponde à string.trim()
removido. É bom que a deferência seja compatível com a entrada do usuário.Você também pode fazer
Vejo:
std::string::String
std::ops::Deref
fonte
Você pode combinar em uma fatia de string.
fonte
.as_ref()
ou.as_str()
, ambos não tomaram posse.Podes tentar:
fonte
&*stringthing
significa e o que faz.