私は寿命に関するRustのドキュメントを読んでいます。 fun(self)
方法はs
インスタンスの所有権を取るためです実装はいつRustで自己の所有権を取得したいですか?
<anon>:16:5: 16:6 error: use of moved value: `s` [E0382]
<anon>:16 s.print();
^
<anon>:16:5: 16:6 help: see the detailed explanation for E0382
<anon>:15:5: 15:6 note: `s` moved here because it has type `S`, which is non-copyable
<anon>:15 s.fun();
:私は次のエラーを取得する
struct S {
x: i8,
}
impl S {
fn fun(self) {}
fn print(&self) {
println!("{}", self.x);
}
}
fn main() {
let s = S { x: 1 };
s.fun();
s.print();
}
:私のようなものを試してみました。これはfun(&self)
に変更することで解決します。
なぜオブジェクト上のメソッドを自分自身で制御する必要があるのかわかりません。私は1つの例しか考えられませんが、destructor
メソッドですが、オブジェクトを破棄したい場合は、オブジェクトの所有者が処理します(この例ではmain
のスコープ)。
私の質問:なぜ構造体の所有権を取得するメソッドを書くことが可能ですか?あなたがこれを望む状況がありますか?
*私はデストラクタメソッドの1つしか考えられません* - 面白いことに、[デストラクタに最も近い](http://doc.rust-lang.org/std/ops/trait.Drop.html)変更可能な参照によって項目を取得します。 – Shepmaster