Я намагаюся розібратися, як поєднатись з String
іржею.
Спочатку я намагався відповідати подібним чином, але зрозумів, що Руст не може неявно std::string::String
перейти з &str
.
fn main() {
let stringthing = String::from("c");
match stringthing {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
}
}
У цьому помилка:
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`
Потім я спробував сконструювати нові String
об'єкти, оскільки не зміг знайти функцію для передавання символу String
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"),
}
}
Це дало мені таку помилку 3 рази:
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
Як насправді відповідати String
s у Rust?
as_str
ще не було. Я змінив прийняту відповідь, але дякую всім людям, які відповіли на це запитання!
stringthing.as_str()
це, мабуть, найпростіша з усіх відповідей; Мені це не подобається,as_ref
тому що це зайве загальне, що може призвести до помилок, і не настільки явне, не зовсім зрозуміло, щоas_ref()
буде&str
,as_str
просто і зрозуміло.