Как сопоставить строку с строковыми литералами в Rust?
Я пытаюсь понять, как совместить String в Rust.
Сначала я попытался сопоставить это, но я понял, что Rust не может неявно отбрасывать от std::string::String
до &str
.
fn main() {
let stringthing = String::from("c");
match stringthing {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
}
}
Затем я попытался построить новые объекты String
, так как я не смог найти функцию для приведения a String
к &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
в Rust?
Ответы
Ответ 1
as_slice
устарел, теперь вы должны использовать признак std::convert::AsRef
:
match stringthing.as_ref() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
Обратите внимание, что вы также должны явно обрабатывать весь файл catch.
Ответ 2
Этот ответ относится к более ранней версии Rust и больше не точен.
Вы можете совместить на фрагменте строки.
match stringthing.as_slice() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
Ответ 3
Вы можете сделать что-то вроде этого:
match &stringthing[..] {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
Также существует метод as_str
с Rust 1.7.0.
Ответ 4
Вы также можете сделать
match &stringthing as &str {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
См: