0
我有一個結構,其中包含一個RefCell
用於在向量中存儲可變值,並且我想遍歷它的值。通過RefCell循環包裝Vec與Rust
添加的元素不會引起問題,而是試圖借用向量轉換成它拋出一個迭代器時:
error: cannot move out of borrowed content [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);
}
}
有我丟失的東西在這裏或鐵鏽過於謹慎呢?
如果有人能填補我對這種工作方式的理解有什麼空白,我們將不勝感激。
是的。正如你可以在這裏看到的:https://doc.rust-lang.org/std/iter/trait.IntoIterator.html 'into_iter'正在使用'self'(不是&self,或&mut self),這意味着它是消耗(移動)它被調用的對象。 你可以接受你自己的答案並以這種方式解決問題。 –