使用"移动"函数中的值

时间:2016-02-13 05:01:21

标签: sorting rust

我想学习Rust并且正在制作一个小程序来处理声音问题。我有一个带有此签名的功能:

fn edit_show(mut show: &mut Vec<Que>) {
    show.sort_by(|a, b| que_ordering(&a.id, &b.id));
    loop {
        println!("Current ques");
        for l in show {
            println!("{}", que_to_line(&l));
        }
    }
}

我收到错误:

  

使用移动值:&#39;显示&#39;

我找不到任何关于如何解决这个问题。这似乎是排序的一个奇怪的错误,因为(我假设)如果我在main函数中执行此操作,我传递的值似乎很无用。

1 个答案:

答案 0 :(得分:4)

解决方案

你的问题在这一行:

for l in show {
    ...
}

这会使用向量show。如果你想借用它的元素,你应该写:

for l in &show {
    ...
}

如果您想要可变地借用它们,请写下for l in &mut show

说明

Rust for循环需要一个实现IntoIterator的类型。首先要注意的是:IntoIterator是针对每个Iterator实施的。参见:

impl<I> IntoIterator for I where I: Iterator

现在让我们搜索Vec impls:

impl<T> IntoIterator for Vec<T> {
    type Item = T
    ...
}

impl<'a, T> IntoIterator for &'a Vec<T> {
    type Item = &'a T
    ...
}

impl<'a, T> IntoIterator for &'a mut Vec<T> {
    type Item = &'a mut T
    ...
}

在这里,您可以看到它是直接为Vec实现的,但也是为了引用它。我希望这三个impl块能说明一切。