ฉันพยายามที่จะหาวิธีจับคู่String
ในสนิม
ตอนแรกฉันพยายามจับคู่แบบนี้ แต่ฉันคิดว่า 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
ไป&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 ได้อย่างไร?
@Zorf คุณพูดถูก คำตอบที่ได้รับการยอมรับเมื่อ
—
Jeroen
as_str
ยังไม่ได้อยู่ ฉันเปลี่ยนคำตอบที่ยอมรับ แต่ขอบคุณทุกคนที่ตอบคำถามนี้!
stringthing.as_str()
อาจเป็นคำตอบที่ตรงไปตรงมาที่สุด ฉันไม่ชอบas_ref
เพราะมันเป็นเรื่องทั่วไปที่ไม่จำเป็นซึ่งจะนำไปสู่ข้อบกพร่องและไม่เป็นที่ชัดเจนจะไม่สมบูรณ์ชัดเจนว่าas_ref()
เป็นไปได้&str
,as_str
เป็นเรื่องง่ายและชัดเจน