1. ホーム
  2. variables

[解決済み] Rustタイプにおけるアンパサンドの意味は?

2022-02-11 01:22:27

質問

Rustのドキュメントでこのコードを見たことがあります。

fn eat(&self) {
    println!("{} is done eating.", self.name);
}

は何をするのでしょうか? &&self というのは?

どのように解決するのですか?

を渡すということです。 参照 を移動させるのではなく、オブジェクトを移動させます。これを区別することが重要です。なぜなら、もしあなたの関数が次のようなものだったら。

fn eat(self) {
    println!("{} is done eating.", self.name);
}

を呼び出し、それを では の後に変数を使用すると、エラーが発生します。

object = Foo::new();
object.eat();
object.something(); // error, because you moved object in eat

を指定しない場合は & の場合、Rust は値を関数に移動させ、元のバインディングはもはやオーナーシップを持ちません。 プレイグラウンドバージョン ):

struct Foo {
    x : u32
}

impl Foo {

    fn eat(self) {
        println!("eating");
    }

    fn something(&self) {
        println!("else");
    }

}

fn main() {
    println!("Hello, world!");

    let g = Foo { x: 5 };
    g.eat();
    g.something();  // if this comes before eat, no errors because we arent moving
}

今すぐ切り替え something を呼び出します。 前に eat . なぜなら something を取るだけです。 参照 , g はまだ所有権を持っているので、続行できます。 eat 一方 g を使用することができなくなります。 g .