メソッド

Rust を使用すると、関数を新しい型に関連付けることができます。これは impl ブロックで実行します。

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

self 引数は、「レシーバ」、つまりメソッドが操作するオブジェクトを指定します。メソッドの一般的なレシーバは次のとおりです。

  • &self: 共有の不変参照を使用して、呼び出し元からオブジェクトを借用します。このオブジェクトは後で再び使用できます。
  • &mut self: 一意の可変参照を使用して、呼び出し元からオブジェクトを借用します。このオブジェクトは後で再び使用できます。
  • self: オブジェクトの所有権を取得し、呼び出し元から遠ざけます。メソッドがオブジェクトの所有者になります。所有権が明示的に送信されない限り、メソッドが戻ると、オブジェクトは破棄(デアロケート)されます。完全な所有権は、必ずしも可変性を意味するわけではありません。
  • mut self: 上記と同じですが、メソッドはオブジェクトを変更できます。
  • レシーバなし: 構造体の静的メソッドになります。通常は、new と呼ばれるコンストラクタを作成するために使用されます。

Speaker Notes

This slide should take about 8 minutes.

キーポイント:

  • メソッドを関数と比較して紹介するとよいでしょう。
    • メソッドは型(構造体や列挙型など)のインスタンスで呼び出されます。最初のパラメータはインスタンスを self として表します。
    • デベロッパーは、メソッド レシーバ構文でコードを整理する目的で、メソッドを使用することもできます。メソッドを使用することで、すべての実装コードを 1 つの予測可能な場所にまとめることができます。
  • メソッド レシーバである self というキーワードの使用について説明します。
    • self: Self の略語であることを示し、構造体名の使用方法についても説明することをおすすめします。
    • Selfimpl ブロックが存在する型の型エイリアスであり、ブロック内の他の場所で使用できることを説明します。
    • self は他の構造体と同様に使用され、ドット表記を使用して個々のフィールドを参照できることを説明します。
    • ここで finish を 2 回実行して、&selfself の違いを示すことをおすすめします。
    • self のバリアント以外にも、レシーバ型として許可されている 特別なラッパー型Box<Self> など)もあります。