2017-08-21 16 views
0

Ich scheine Typen zu mischen, aber ich kann nicht recht herausfinden, wie man das behebt. Kann mir jemand helfen?Nicht übereinstimmende Typen für übereinstimmende Zeichenkette

let args_vector: Vec<String> = env::args().collect(); 
for arg in &args_vector[1..]{ 
    match arg{ 
     "--bytes" => { 
       flag.c = true; 
      }, 
     "--chars" => { 
       flag.m =true; 
      }, 
     _ => println! ("Error"), 
    } 
} 

Auf den Spielen, erhalte ich diese Fehlermeldung:

mismatched types: expected struct `std::string::String`, found str 
+3

Mögliche Duplikate von [Wie findet man eine Zeichenkette mit Zeichenkettenliteralen in Rust?] (Https://stackoverflow.com/questions/25383488/how-to-match-a-string-against-string-literals-in- Rost) – ljedrz

+2

Nicht verwandt, aber Sie können 'für arg in std :: env :: args() schreiben. skip (1) {/*etc.*/}' – Boiethios

Antwort

3

Hier arg vom Typ String im Spiel und "--bytes" ist vom Typ &str. So muss arg vom Typ String in &str konvertiert werden. Dies kann mit String::as_ref() erfolgen.

let args_vector: Vec<String> = env::args().collect(); 
for arg in &args_vector[1..] { 
    match arg.as_ref() { 
     "--bytes" => { 
      flag.c = true; 
     } 
     "--chars" => { 
      flag.m = true; 
     } 
     _ => println!("Error") 
    }; 
} 

Notiere die fehlende ; nach println! alle match Arme die gleiche Art Rückkehr zu machen.

Verwandte Themen