Я пытаюсь выяснить, как соответствовать 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"),
}
}
Это имеет ошибку:
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
объекты, так как не смог найти функцию для приведения a 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
просто и понятно.