【发布时间】:2016-12-13 17:31:44
【问题描述】:
我有一个包含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 对此过于谨慎?
如果有人能填补我对其工作原理的理解中的任何空白,我们将不胜感激。
【问题讨论】: