문자열 리터럴과 문자열을 일치시키는 방법은 무엇입니까?
나는 어떻게 그것과 일치하는지 알아내려고 노력 중입니다.String러스트에서
처음에는 이렇게 매칭을 해봤는데 러스트가 암시적으로 캐스팅을 할 수 없다는 것을 알게 되었습니다.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"),
}
}
이로 인해 다음과 같은 오류가 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죄는 러스트?
업데이트: 사용.as_str()이렇게 변환합니다.String완전히&str:
match stringthing.as_str() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
이유 .as_str()보다 간결하고 엄격한 유형 검사를 적용합니다.특성as_ref여러 유형에 대해 구현되며 유형에 대해 동작이 변경될 수 있습니다.String예상치 못한 결과로 이어집니다.마찬가지로, 입력 인수가 유형을 변경하면 컴파일러는 해당 유형이 특성을 구현할 때 문제 신호를 보내지 않습니다.as_ref.
문서에는 다음과 같은 내용이 있습니다.as_str또한 https://doc.rust-lang.org/std/string/struct.String.html, https://doc.rust-lang.org/std/primitive.str.html
이전 답변:
as_slice더 이상 사용되지 않습니다. 이제 특성을 사용해야 합니다.std::convert::AsRef대신:
match stringthing.as_ref() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
또한 catch-all 케이스를 명시적으로 처리해야 합니다.
다음과 같은 작업을 수행할 수 있습니다.
match &stringthing[..] {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
그리고 또.as_str러스트 1.7.0 기준 방법:
match stringthing.as_str() {
"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!"),
}
참조:
편집자 참고 사항:이 답변은 Rust 1.0 이전 버전과 관련이 있으며 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")
}
}
변환할 수 있습니다.String안으로&str다음 작업을 수행합니다.
fn main() {
let stringthing = String::from("c");
match &stringthing[..] {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
}
}
문자열에서 문자열 조각을 가져오려면 _str()로 사용
fn main() {
let stringthing = String::from("c");
match stringthing.as_str() {
String::from("a") => println!("0"),
String::from("b") => println!("1"),
String::from("c") => println!("2"),
}
}
콘솔에서 입력을 가져와 일치를 수행하려면 입력에서 이스케이프 문자인 '\n'을 제거하기 위해 as_str() 뒤에 trim()을 호출해야 합니다.에서 처럼
match stringthing.as_str().trim() {...}
as_str() 메서드를 사용하여 문자열을 &str로 변환한 다음 다음과 같이 &str 값을 일치시킬 수 있습니다.
fn main() {
let stringthing = String::from("c");
match stringthing.as_str() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("other"),
}
}
또는 String 값을 변수에 바인딩한 다음 다음과 같이 변수에 일치시킬 수 있습니다.
fn main() {
let stringthing = String::from("c");
match stringthing {
ref x if x == "a" => println!("0"),
ref x if x == "b" => println!("1"),
ref x if x == "c" => println!("2"),
_ => println!("other"),
}
}
또는 == 연산자를 사용하여 String 값을 다음과 같은 문자열 리터럴과 비교할 수 있습니다.
fn main() {
let stringthing = String::from("c");
if stringthing == "a" {
println!("0");
} else if stringthing == "b" {
println!("1");
} else if stringthing == "c" {
println!("2");
} else {
println!("other");
}
}
언급URL : https://stackoverflow.com/questions/25383488/how-to-match-a-string-against-string-literals
'programing' 카테고리의 다른 글
| iOS 상태 표시줄 높이를 프로그래밍 방식으로 가져오는 방법 (0) | 2023.05.01 |
|---|---|
| 작업이 완료될 때까지 기다리는 중 (0) | 2023.05.01 |
| 오류: "설치 가능한 ISAM을 찾을 수 없습니다." (0) | 2023.05.01 |
| C#에서 const와 read only의 차이점은 무엇입니까? (0) | 2023.05.01 |
| Git 저장소에 빈 디렉토리를 추가하려면 어떻게 해야 합니까? (0) | 2023.05.01 |