Я пытаюсь выяснить, как соответствовать 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?
stringthing.as_str()
вероятно, самый простой из всех ответов; Мне не нравится,as_ref
потому что это излишне общее, что может привести к ошибкам, и не столь явно, не совсем понятно, чтоas_ref()
будет&str
,as_str
просто и понятно.as_str
еще не существовало. Я изменил принятый ответ, но спасибо всем, кто ответил на этот вопрос!Ответы:
Вы можете сделать что-то вроде этого:
Есть также
as_str
метод с Rust 1.7.0:источник
as_slice
устарела, теперьstd::convert::AsRef
вместо этого следует использовать черту :Обратите внимание, что вы также должны явно обработать универсальный случай.
источник
trim()
функцию. Просто использованиеas_ref()
не соответствует строке.trim()
удаляет. Это удобно для сравнения с пользовательским вводом.Вы могли бы также сделать
Видеть:
std::string::String
std::ops::Deref
источник
Вы можете сопоставить на фрагмент строки.
источник
.as_ref()
или.as_str()
, оба не взяли на себя ответственность.Можешь попробовать:
источник
&*stringthing
означает и что делает.