Saya mencoba mencari cara untuk mencocokkan String
di Rust.
Saya awalnya mencoba mencocokkan seperti ini, tetapi saya tahu Rust tidak bisa secara implisit dilemparkan dari std::string::String
ke &str
.
fn main() {
let stringthing = String::from("c");
match stringthing {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
}
}
Ini memiliki kesalahan:
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`
Saya kemudian mencoba untuk membangun String
objek baru , karena saya tidak dapat menemukan fungsi untuk melemparkan String
ke &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"),
}
}
Ini memberi saya kesalahan berikut 3 kali:
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
Bagaimana cara mencocokkan String
di Rust?
stringthing.as_str()
mungkin jawaban yang paling mudah dari semua jawaban; Saya tidak sukaas_ref
karena itu tidak perlu umum, yang dapat menyebabkan bug, dan tidak sejelas itu, tidak sepenuhnya jelas apakahas_ref()
yang akan menjadi&str
,as_str
sederhana dan jelas.as_str
belum ada. Saya mengubah jawaban yang diterima tetapi berterima kasih kepada semua orang yang menjawab pertanyaan ini!Jawaban:
Anda dapat melakukan sesuatu seperti ini:
Ada juga
as_str
metode pada Rust 1.7.0:sumber
as_slice
sudah ditinggalkan, Anda sekarang harus menggunakan sifatstd::convert::AsRef
sebagai gantinya:Perhatikan bahwa Anda juga harus secara eksplisit menangani kasing semua.
sumber
trim()
fungsi. Hanya menggunakanas_ref()
tidak cocok dengan string.trim()
dihapus. Ini bagus untuk menunda agar sesuai dengan input pengguna.Anda juga bisa melakukannya
Lihat:
std::string::String
std::ops::Deref
sumber
Anda dapat mencocokkan pada irisan string.
sumber
.as_ref()
atau.as_str()
, keduanya tidak mengambil kepemilikan.Anda dapat mencoba:
sumber
&*stringthing
artinya dan apa artinya.