Progrust Library.

// dictionary

メソッド.

メソッド(method)は、implブロック内で定義する関連関数のうち、第一引数にself(またはその参照)を取るものです。関連関数は型名::関数名()の形でしか呼び出せませんが、メソッドは値.メソッド名()という専用の呼び出し構文(ドット記法)でも呼べる点が異なります(型名::メソッド名(値)という通常の関数呼び出し記法も引き続き使えます)。

struct User {
    name: String,
    age: u32,
}

impl User {
    // &self: フィールドを読み取るだけのメソッド(共有参照を受け取る)
    fn is_adult(&self) -> bool {
        self.age >= 18
    }

    // &mut self: フィールドを書き換えるメソッド(排他参照を受け取る)
    fn have_birthday(&mut self) {
        self.age += 1;
    }
}

fn main() {
    let mut user = User { name: String::from("田中"), age: 17 };
    println!("成人: {}", user.is_adult());

    user.have_birthday();
    println!("{}さん、{}歳になりました", user.name, user.age);
}
Playgroundで開く

selfの3つの形式

&self・&mut self・selfは、それぞれself: &Self・self: &mut Self・self: Selfの省略記法です(Selfはimpl対象の型を指すエイリアス)。

記法 完全形 用途
&self self: &Self 値を読み取るだけ(最も多い)
&mut self self: &mut Self フィールドを書き換える
self self: Self 所有権を奪って消費・変換する(例: ビルダーパターンの終端メソッド)

補足

selfにはBox・Rc・Arcなども指定できる

selfの型にはSelfへの参照だけでなくBox<Self>・Rc<Self>・Arc<Self>も直接指定できます。例えばself: Box<Self>は、ヒープ上のインスタンスの所有権を消費するメソッドを定義したい場合に使います。

この辞書が使われているページ

backlinks 33

  1. 辞書Copyトレイト
  2. 辞書Debugトレイト
  3. 辞書Defaultトレイト
  4. 辞書Displayトレイト
  5. 辞書impl Trait
  6. 辞書implブロック
  7. 辞書Option型
  8. 辞書pub
  9. 辞書unwrap
  10. 辞書use宣言
  11. 辞書タプル構造体
  12. 辞書デフォルト実装
  13. 辞書トレイト
  14. 辞書トレイトオブジェクト
  15. 辞書トレイト境界
  16. 辞書ユニット様構造体
  17. 辞書ライフタイム注釈
  18. 辞書演算子オーバーロード
  19. 辞書関連関数
  20. 辞書関連型
  21. 辞書参照
  22. 辞書参照外し
  23. 辞書自動参照・自動参照外し
  24. 辞書比較のトレイト
  25. 辞書列挙型
  26. 本動かして学ぶRustプログラミング問題集 › 第10章 メソッドと関連関数
  27. 本動かして学ぶRustプログラミング問題集 › 第11章 列挙型とmatch式
  28. 本動かして学ぶRustプログラミング問題集 › 第12章 OptionとResult
  29. 本動かして学ぶRustプログラミング問題集 › 第13章 モジュールと公開範囲
  30. 本動かして学ぶRustプログラミング問題集 › 第17章 ジェネリクス
  31. 本動かして学ぶRustプログラミング問題集 › 第18章 トレイト
  32. 本動かして学ぶRustプログラミング問題集 › 第21章 トレイトオブジェクトと関連型
  33. 本動かして学ぶRustプログラミング問題集 › 第22章 ライフタイム