条件付きメソッド実装

// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0

// 型定義にはトレイト境界を付けません。
pub struct Value<T>(T);

// 代わりに、境界はその型の実装に付けます。
impl<T: std::fmt::Display> Value<T> {
    fn log(&self) {
        println!("{}", self.0);
    }
}

// あるいは
impl<T> Value<T> {
    // where 句でトレイト境界を指定します
    fn log_error(&self)
    where
        T: std::error::Error,
    {
        eprintln!("{}", self.0);
    }
}
  • ジェネリックパラメータを持つ型を作成するときは、そのパラメータが何であるか、 またはどのトレイトを実装しているかに応じて、その型の実装を書くことができます。

  • これらのメソッドは、その型がそれらの条件を満たす場合にのみ利用できます。

  • 順序付き集合のように、内部の型を常に Ord にしたい場合には、 これが型のパラメータにトレイト境界を付けるための推奨される方法です。

    これを型自体の定義には付けません。そうすると、ジェネリックパラメータ付きで その型が言及されるあらゆる利用側の箇所で問題を引き起こすためです。

    条件付きメソッド実装でも、不変条件は十分に維持できます。