Tôi đang cố gắng tìm ra cách khớp với một String
trong Rust.
Ban đầu tôi đã thử kết hợp như thế này, nhưng tôi phát hiện ra Rust không thể ngầm chuyển từ std::string::String
sang &str
.
fn main() {
let stringthing = String::from("c");
match stringthing {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
}
}
Điều này có lỗi:
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`
Sau đó tôi đã cố gắng xây dựng các String
đối tượng mới , vì tôi không thể tìm thấy một hàm để truyền a String
đến 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"),
}
}
Điều này đã cho tôi các lỗi sau 3 lần:
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
Làm thế nào để thực sự khớp String
s trong Rust?
as_str
chưa tồn tại. Tôi đã thay đổi câu trả lời được chấp nhận nhưng cảm ơn tất cả những người đã trả lời câu hỏi này!
stringthing.as_str()
có lẽ là đơn giản nhất trong tất cả các câu trả lời; Tôi không thíchas_ref
bởi vì nó không cần thiết chung chung, có thể dẫn đến lỗi và không rõ ràng, nó không hoàn toàn rõ ràng rằngas_ref()
nó sẽ là một&str
,as_str
đơn giản và rõ ràng.