在此代码中:
fn main() {
let my_vec = vec![1,2,3,4,5,6,7,8];
let mut pair: Vec<Vec<u8>> = vec![vec![], vec![]];
let mut my_vec_iter = my_vec.into_iter();
// pair.iter_mut().for_each(|v| v.append(&mut my_vec_iter.take(4).collect()));
// error[E0507]: cannot move out of `my_vec_iter`, a captured variable in an `FnMut` closure
let my_ref = &mut my_vec_iter;
pair.iter_mut().for_each(|v| v.append(&mut my_ref.take(4).collect()));
println!("{:?}", pair);
}
被注释掉的行不能编译,因为(据我所知)take()
获得了它的接收器的所有权,而您不能用捕获的变量来实现这一点.
但另一个版本,其中捕获的变量是&mut my_vec_iter
,does可以用,我不明白发生了什么.我还找不到take(&mut self)
的版本,所以它大概还在呼叫take(self)
?
像我5岁那样解释--为什么获取显式可变引用会阻止take
获取所有权?或者,如果我误解了什么,到底是怎么回事?