ベクトル内に可変値を格納するためにRefCell
を含む構造体があり、その値をループしたいと思います。要素を追加するRefCellでルーピングするとRustでVecがラップされます
は問題ないが、それはスローイテレータに借りたベクトルを変換しようとすると:それは不変だ場合
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);
}
}
私はここに欠けているか、錆はこのことについて過度に慎重されているものはありますか?
誰かがこの仕組みの理解に間隙を埋めることができれば幸いです。
はい。ここからわかるように、htt5://doc.rust-lang.org/std/iter/trait.IntoIterator.html 'into_iter'は' self'を取っています(selfではなく&selfであり、&mut selfです)。それが呼び出されているオブジェクトを消費(移動)します。 あなた自身の答えを受け入れることができ、このように質問を閉じることができます。 –