我很擅长生锈并尝试编写命令行实用程序作为学习方法。
我正在获取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() {
^~~~~~~~~~~
发生了什么事?
答案 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() {
/* ... */
}