Sorting 使用;“移动”;函数中的值

Sorting 使用;“移动”;函数中的值,sorting,rust,Sorting,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_t

我想学习生锈,正在制作一个小程序来处理声音问题。我有一个带有此签名的函数:

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));
        }
    }
}
fn编辑显示(mut-show:&mut-Vec){
show.sort|u by(| a,b | que|u ordering(&a.id,&b.id));
环路{
println!(“当前问题”);
为了我的演出{
println!(“{}”,queu to_line(&l));
}
}
}
我得到一个错误:

移动值的使用:“显示”

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

解决方案 您的问题在这一行:

for l in show {
    ...
}
这将消耗向量
show
。如果你想借用它的元素,你应该写:

for l in &show {
    ...
}
如果您想以可变方式借用它们,请在&mut-show中为l编写

解释 Rust for循环需要实现的类型。首先要注意的是:
IntoIterator
是为每个
Iterator
实现的。见:

impl<I> IntoIterator for I where I: Iterator
在这里,您可以看到它是直接为
Vec
实现的,但也可以作为对它的引用。我希望这三个impl模块能说明问题。

解决方案 您的问题在这一行:

for l in show {
    ...
}
这将消耗向量
show
。如果你想借用它的元素,你应该写:

for l in &show {
    ...
}
如果您想以可变方式借用它们,请在&mut-show中为l编写

解释 Rust for循环需要实现的类型。首先要注意的是:
IntoIterator
是为每个
Iterator
实现的。见:

impl<I> IntoIterator for I where I: Iterator

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

队列就是一个,提示就是一个。Que不是AFAIK这个词。队列是,提示是。Que不是AFAIK这个词。值得注意的是,在某些情况下,
&mut T T
会自动重新启动,因此不算作移动。知道哪个是哪个似乎有点像一门黑暗的艺术。在我的例子中,答案似乎是让它显示。iter()而不是像doing&show那样显示类型conflict@SebastianMalton你确定吗
&show
show.iter()
在您的情况下应该会做完全相同的事情……是的,我可以稍后发布编译器日志。值得注意的是,在某些情况下,
&mut T
会自动重传,因此不算作移动。知道哪个是哪个似乎有点像一门黑暗的艺术。在我的例子中,答案似乎是让它显示。iter()而不是像doing&show那样显示类型conflict@SebastianMalton你确定吗
&show
show.iter()
在您的情况下应该做完全相同的事情……是的,我可以稍后发布编译器日志