2017-12-04 13 views
0

반복자의 항목과 일치하는 가장 관용적 인 방법은 무엇입니까? 예를 들어 명령 줄 인수를 사용하는 경우 항목 중 하나에서 패턴 일치를 사용하는 가장 좋은 방법은 무엇입니까? 이것은 내가 뭘하는지이고 as_ref()이 필요한 이유는 100 % 확실하지 않다과 &args[0] 작동하지 않을 이유 :반복자의 항목과 일치시키는 방법은 무엇입니까?

let args: Vec<String> = env::args().skip(1).collect(); 
match args[0].as_ref() {...} 
+0

(예 : [어떻게 녹에서 문자열 리터럴에 대한 문자열과 일치 하는가? ] (https://stackoverflow.com/questions/25383488/how-to-match-a-string-against-string-literals-in-rust)), 나는 프로그램의 주장이나 더 일반적으로는 반복자의 항목. – ljedrz

+0

감사합니다. 그 링크는 실제로 as_ref()에 대해 배웠습니다. 내가 그것을 사용하고 잘 작동하지만 왜 그 색인에 대한 메서드를 호출해야하는지에 대해 혼란 스러웠다. –

+1

패턴의 'String'이'& str' 문자열 슬라이스로 취급되고'match' 본문의 조각과 일치하도록'as_ref()'가 필요합니다. – ljedrz

답변

1

env::args() 이후 반환 반복자 (Args가), 당신이와 같이 작업 할 수 다른 반복자. 한 번 주어진 항목에 대해 일치 할 경우, 가장 간단한 방법은 될 것이라고해야 할 일 : 문자열과 일치하는 것은 과거에 이미 대답 된 이후

use std::env; 

fn main() { 
    let mut args = env::args().skip(1); 

    match args.next() { 
     Some(x) => { 
      if &x == "herp derp" { ... } 
     }, 
     None =>() 
    } 
} 
+0

@AliYazdani 나는 인수 값에 대해 * 실제로 * 일치하는 답변을 수정했습니다. – ljedrz

+0

아름다움! 감사. LOL "herp derp". 질문 하나 (질문에 답하고 싶다면) Vec은 런타임까지 알 수 없기 때문에 arg를 힙에 할당해야한다고 생각했기 때문에 처음에는 Vec을 사용했습니다. 데이터 요구 사항에 대해 컴파일러를 명시하지 않고 버전을 작동하게하는 메커니즘은 무엇입니까? –

+1

@AliYazdani 인수 문자열은 여전히 ​​힙에 있습니다. 그것들을 사용할 수있게하기 위해서'Vec'에 모을 필요가 없다는 것입니다. – ljedrz