我有一个包含RefCell
的结构,用于在向量中存储可变值,我想循环其值。
添加元素不会导致任何问题,但是当尝试将借来的向量转换为迭代器时,它会抛出:
错误:无法移出借来的内容[E0507]
为什么借用甚至重要,如果它是不可变的?我不明白为什么当变量的内容甚至没有改变时,编译器会将此标记为潜在问题。
我可以通过克隆来解决所有权问题,但为什么我需要首先执行此操作?克隆我试图循环的结构可能会产生很高的CPU成本,如果可能的话我宁愿不去做。
我正在努力实现的例子:
fn main() {
use std::cell::RefCell;
let c = RefCell::new(vec![1, 2, 3]);
let arr = c.borrow();
for i in arr.into_iter() {
println!("{}", i);
}
}
我在这里缺少什么东西,或者Rust对此过于谨慎?
如果有人能填补我对其运作方式的理解,我将不胜感激。
答案 0 :(得分:2)
问题似乎是Vec.into_iter
和Vec.iter
之间存在差异。要解决,请改变:
for i in arr.into_iter() {
println!("{}", i);
}
为:
for i in arr.iter() {
println!("{}", i);
}