5

Drop型が実装されている変数がスコープ外になると、関数への呼び出しfn drop(&mut self)が挿入され、スコープ外になる変数への新しく作成された変更可能な参照が渡されることを理解しています。

しかし、変数が不変にバインドされていて、それを可変的に借用することが違法である場合、どのようにそれが可能でしょうか? これが私が話していることの例です:

fn main() {  
  let x = vec![1, 2, 3];
  let y = &mut x;
}

これにより、次のエラーが生成されます:不変のローカル変数を期待どおりに可変として借りることはできませx

変更可能な参照が想定されているxため、 がドロップされる場合は、同様のことが発生する必要があります。drop

4

1 に答える 1

8

変数の所有者は、変数バインディングが作成されるときに可変性を決定します。それは値自体に固有のものではありません。

fn main() {  
    let x = vec![1, 2, 3];
    let mut z = x;
    let y = &mut z;
}

ドロップは、プログラマーが名前を付けた最後の変数バインディングが変数の所有権を放棄したときに発生すると考えることができます。魔法の Drop-fairy は、不要になった変数の所有権を取得し、変更可能なバインディングを使用します。その後、Drop-fairyDrop::dropは最後の魔法を実行する前に呼び出して、アイテム自体が占めるスペースを解放することができます。

Drop-fairy はまだ実際の Rust の概念ではないことに注意してください。その RFC はまだ非常に予備的な段階にあります。

于 2015-07-23T21:27:45.543 に答える