2014-09-01 30 views
3

我是非常新的生鏽,並試圖編寫一個命令行實用程序作爲學習的方式。錯誤'不能移出解除引用'當試圖匹配從矢量字符串

我得到的args列表,並設法滿足他們

let args = os::args() 
//some more code 
match args[1].into_ascii_lower().as_slice() { 
    "?" | "help" => { //show help }, 
    "add" => { //do other stuff }, 
    _ => { //do default stuff } 
} 

這將導致該錯誤

cannot move out of dereference (dereference is implicit, due to indexing) 
match args[1].into_ascii_lower().as_slice() { 
     ^~~~~~~ 

我不知道這意味着什麼,但搜索產量this我沒完全沒有,但將args[1]更改爲args.get(1)給了我另一個錯誤

error: cannot move out of dereference of `&`-pointer 
match args.get(1).into_ascii_lower().as_slice() { 
     ^~~~~~~~~~~ 

發生了什麼事?

回答

3

正如你可以在文檔中看到的,into_ascii_lower()類型是(see here):

fn into_ascii_upper(self) -> Self; 

這需要self直接,而不是作爲參考。意思是它實際上消耗了字符串並返回另一個字符串。

所以,當你做args[1].into_ascii_lower(),你試圖直接消費args,這是禁止的元素之一。您可能需要複製此字符串,並在此副本上撥打into_ascii_lower(),如下所示:

match args[1].clone().into_ascii_lower().as_slice() { 
    /* ... */ 
} 
+0

是的,就這樣做了。非常感謝您的快速回復。錯誤信息讓我失望,但我想現在有道理。再次感謝。 – ahmelsayed 2014-09-01 23:09:20