使用 Rust 循环遍历 RefCell 包裹的 Vec

Noi*_*Sek 3 iterator vector 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里遗漏了什么,还是 Rust 对此过于谨慎?

如果有人能填补我对其工作原理理解的任何空白,我将不胜感激。

Noi*_*Sek 7

看来问题在于Vec.into_iter和之间存在差异Vec.iter。要解决,改变:

for i in arr.into_iter() {
    println!("{}", i);
}
Run Code Online (Sandbox Code Playgroud)

到:

for i in arr.iter() {
    println!("{}", i);
}
Run Code Online (Sandbox Code Playgroud)

如在 Rust 中有效使用迭代器中所述。