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 selfselfは、それぞれself: &Selfself: &mut Selfself: 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 16

  1. 辞書implブロック
  2. 辞書Option型
  3. 辞書pub
  4. 辞書unwrap
  5. 辞書use宣言
  6. 辞書タプル構造体
  7. 辞書ユニット様構造体
  8. 辞書関連関数
  9. 辞書参照
  10. 辞書参照外し
  11. 辞書自動参照・自動参照外し
  12. 辞書列挙型
  13. 動かして学ぶRustプログラミング問題集 › 第10章 メソッドと関連関数
  14. 動かして学ぶRustプログラミング問題集 › 第11章 列挙型とmatch式
  15. 動かして学ぶRustプログラミング問題集 › 第12章 OptionとResult
  16. 動かして学ぶRustプログラミング問題集 › 第13章 モジュールと公開範囲