2017-08-21 248 views
0

我似乎在混合类型,但我无法弄清楚如何解决这个问题。有人能帮我吗?匹配字符串上的匹配类型不匹配

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"), 
    } 
} 

在比赛中,我得到这个错误:

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

[如何在Rust中匹配字符串字符串?](https://stackoverflow.com/questions/25383488/how-to-match-a-string-against-string-literals-in-生锈) – ljedrz

+2

不相关,但是你可以在std :: env :: args()中写入'arg()。skip(1){/ * etc.*/} – Boiethios

回答

3

这里arg是在比赛String型和"--bytes"&str类型。因此arg类型String必须转换成&str。这可以使用String::as_ref()完成。

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") 
    }; 
} 

println!后失踪;让所有match武器返还相同种类。