New メソッド

実際のコードを型に関連付けるには,impl ブロックを使用します:

impl List {
    // TODO, コードを書く
}

後は,実際にどんなコードを書くか考えるだけです.Rust では,次のように関数を宣言します.

fn foo(arg1: Type1, arg2: Type2) -> ReturnType {
    // 関数の中で行う処理
}

最初に欲しいのは,リストを新しく作る方法です.実装の詳細は隠しておきたいので, それを関数として提供する必要があります.Rust では,こういう場合には静的メソッドを使用するのが一般的です. 静的メソッドは,impl ブロックの中にある普通の関数です:

impl List {
    pub fn new() -> Self {
        List { head: Link::Empty }
    }
}

ここで注釈を少し:

  • Self は「impl の横の,いちばん上に書いたあの型」の別名です.これで同じコードを繰り返さずに済みます.
  • 構造体のインスタンスは,構造体を宣言するのとほぼ同じ方法で作成できますが,フィールドの型を指定する代わりに,値を与えて初期化します.
  • enum のヴァリアントは,名前空間演算子である :: を使って参照します.
  • 関数は暗黙のうちに最後の式を返します.これにより単純な関数が少しすっきりします.他の C 系の言語と同様に,return を使って関数の終端に来る前に値を返すことも可能です.