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
캐스팅하는 함수를 찾을 수 없으므로 새 객체 를 만들려고 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"),
}
}
이로 인해 다음과 같은 오류가 세 번 발생했습니다.
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
Rust에서 s 를 실제로 일치시키는 방법은 무엇입니까?
답변
다음과 같이 할 수 있습니다 :
match &stringthing[..] {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
as_str
Rust 1.7.0부터 방법 이 있습니다 .
match stringthing.as_str() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
답변
as_slice
더 이상 사용되지 않습니다. 이제 특성을 std::convert::AsRef
대신 사용해야합니다 .
match stringthing.as_ref() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
포괄 사건도 명시 적으로 처리해야합니다.
답변
당신은 또한 할 수 있습니다
match &stringthing as &str {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
보다:
답변
편집자 주 :이 답변은 1.0 이전의 Rust 버전과 관련이 있으며 Rust 1.0에서는 작동하지 않습니다
문자열 슬라이스에서 일치시킬 수 있습니다.
match stringthing.as_slice() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
답변
당신은 시도 할 수 있습니다:
fn main() {
let stringthing = String::from("c");
match &*stringthing {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("else")
}
}
답변
