🤖
【Rust】Selfとselfの違い
Selfとselfの違い
RustのSelf
とself
は、全く異なるものです。
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