当尝试从向量中匹配字符串时出现错误“无法移动解引用”。

3
我很新于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() {
      ^~~~~~~

我不知道那是什么意思,但搜索结果发现这篇文章,虽然没看懂,但是将args[1]改为args.get(1)后还是出现了另一个错误。

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

发生了什么事?

1个回答

3

正如您在文档中看到的,into_ascii_lower() 的类型是(参见此处):

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() {
    /* ... */
}

是的,就是这样。非常感谢您的快速回复。错误信息让我有些困惑,但现在我想我明白了。再次感谢。 - ahmelsayed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接