循环通过RefCell包裹Vec与Rust

时间:2016-08-08 03:10:42

标签: vector iterator rust

我有一个包含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对此过于谨慎?

如果有人能填补我对其运作方式的理解,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

问题似乎是Vec.into_iterVec.iter之间存在差异。要解决,请改变:

for i in arr.into_iter() {
    println!("{}", i);
}

为:

for i in arr.iter() {
    println!("{}", i);
}

Effectively Using Iterators In Rust中所述。