Próbuję wymyślić, jak dopasować a String
w Rust.
Początkowo próbowałem dopasować w ten sposób, ale doszedłem do wniosku, że Rust nie może pośrednio rzucać od std::string::String
do &str
.
fn main() {
let stringthing = String::from("c");
match stringthing {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
}
}
Ma to błąd:
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`
Następnie próbowałem skonstruować nowe String
obiekty, ponieważ nie mogłem znaleźć funkcji do rzutowania String
na 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"),
}
}
To dało mi 3 razy następujący błąd:
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
Jak faktycznie dopasować String
s w Rust?
as_str
jeszcze nie istniała. Zmieniłem przyjętą odpowiedź, ale dziękuję wszystkim, którzy odpowiedzieli na to pytanie!
stringthing.as_str()
jest prawdopodobnie najprostszą ze wszystkich odpowiedzi; Nie podoba mi się,as_ref
ponieważ jest to niepotrzebnie ogólne, co może prowadzić do błędów, i nie jest tak jednoznaczne, nie jest całkowicie jasne, żeas_ref()
będzie&str
,as_str
jest proste i jasne.