Rust 错误';无法移出取消引用';尝试从vector匹配字符串时
我是个新手,尝试编写一个命令行实用程序来学习 我得到了他们的名单,并试图匹配他们Rust 错误';无法移出取消引用';尝试从vector匹配字符串时,rust,Rust,我是个新手,尝试编写一个命令行实用程序来学习 我得到了他们的名单,并试图匹配他们 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 } } 这导致了这个错误
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() {
^~~~~~~
我不知道这意味着什么,但我没有完全获得搜索结果,但是将args[1]
更改为args.get(1)
会给我带来另一个错误
error: cannot move out of dereference of `&`-pointer
match args.get(1).into_ascii_lower().as_slice() {
^~~~~~~~~~~
发生什么事了 正如您在文档中所看到的,
into\u ascii\u lower()
的类型是():
它直接采用self
,而不是作为参考。这意味着它实际使用字符串并返回另一个字符串
因此,当您将args[1]转换为\u ascii\u lower()
时,您尝试直接使用args
的一个元素,这是禁止的。您可能希望复制此字符串,并在此副本上调用到\u ascii\u lower()
,如下所示:
match args[1].clone().into_ascii_lower().as_slice() {
/* ... */
}
是的,就是这样。非常感谢您的快速回复。这个错误消息把我吓跑了,但我想它现在有意义了。再次感谢。
match args[1].clone().into_ascii_lower().as_slice() {
/* ... */
}