🤖

【Rust】Selfとselfの違い

2023/04/22に公開

Selfとselfの違い

RustのSelfselfは、全く異なるものです。

Selfは、trait内で使用される特別なキーワードで、Selfはそのトレイトを実装している型自体を指します。

例えば、以下のようにtrait内で使用されます。

trait MyTrait {
  fn new() -> Self;
}

ここでは、trait内でnewという関連関数が定義されています。
この関数が戻り値に指定したSelfは、そのtraitを実装する具体的な型を指します。

一方、selfは、Rustのキーワードでメソッドの引数または関数呼び出しで利用されるキーワードです。

selfは、そのメソッドが定義された構造体または列挙型のインスタンス(self by value)または参照(self by reference)を指します。

例えば、以下のようにselfを使用することができます。

struct MyStruct {
    my_field: String,
}

impl MyStruct {
    fn my_method(&self) {
        println!("my_field: {}", self.my_field);
    }
}

fn main() {
    let my_struct = MyStruct { my_field: "Hello".to_string() };
    my_struct.my_method();
}

ここでは、my_fieldメソッドの引数として&selfが使用されています。
これは、MyStructのインスタンスの参照を表し、self.my_fieldでは参照先のMyStructインスタンスのメンバーであるmy_fieldにアクセスしています。

Discussion