我想学习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函数中执行此操作,我传递的值似乎很无用。
答案 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块能说明一切。