错误'无法摆脱取消引用'当试图匹配矢量字符串时

时间:2014-09-01 20:54:15

标签: rust

我很擅长生锈并尝试编写命令行实用程序作为学习方法。

我正在获取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() {
      ^~~~~~~~~~~

发生了什么事?

1 个答案:

答案 0 :(得分:3)

正如您在文档中看到的那样,into_ascii_lower()的类型是(see here):

fn into_ascii_upper(self) -> Self;

直接使用self,而不是参考。这意味着它实际上消耗了String并返回另一个。

因此,当您执行args[1].into_ascii_lower()时,您会尝试直接使用被禁止的args元素之一。您可能想要复制此字符串,并在此副本上调用into_ascii_lower(),如下所示:

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