Progrust Library.

// dictionary

関連関数.

関連関数(associated function)は、implブロック内で特定の型に紐づけて定義する関数です。第一引数にselfを取るものは特に「メソッド」と呼ばれます。一方、selfを取らない関連関数は型名::関数名()の形で呼び出し、インスタンスがまだ無い状態でも使える点がメソッドと異なります。

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

impl User {
    // self を取らない関連関数。コンストラクタとしてよく使われる
    fn new(name: String, age: u32) -> Self {
        User { name, age }
    }
}

fn main() {
    let user = User::new(String::from("田中"), 28);
    println!("{}さん({}歳)", user.name, user.age);
}
Playgroundで開く

呼び出し方と用途

関連関数は型名::関数名()の形で呼び出します(上記のUser::new(...))。標準ライブラリでも文字列型String::new()String::from(...)ベクタ(Vec)Vec::new()のように、インスタンスを新しく作る「コンストラクタ」的な役割でよく使われます。ただしnewという名前自体はRustの予約語ではなく単なる命名慣習で、コンパイラが特別扱いするものではありません。

戻り値の型に使ったSelfは、impl対象の型(この例ではUser)を指すエイリアスです。Userと書いても同じ意味ですが、型名を変更してもそのまま使えるためSelfと書くのが一般的です。

補足

メソッド呼び出しとの関係

値.method()というメソッド呼び出し構文でも、実体はselfを取る関連関数の呼び出しです。コンパイラが受け手の型に応じて参照の付与・参照外しを自動で行う(自動参照・自動参照外し)ため、User::method(&user)のように通常の関連関数と同じ形式でも呼び出せます(実用上はメソッド構文を使います)。

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

backlinks 5

  1. 辞書implブロック
  2. 辞書pub
  3. 辞書メソッド
  4. 辞書ユニット様構造体
  5. 動かして学ぶRustプログラミング問題集 › 第10章 メソッドと関連関数