デフォルトのメソッド実装

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

pub trait CollectLeaves {
    type Leaf;

    // 必須メソッド
    fn collect_leaves_buffered(&self, buf: &mut Vec<Self::Leaf>);

    // デフォルト実装
    fn collect_leaves(&self) -> Vec<Self::Leaf> {
        let mut buf = vec![];
        self.collect_leaves_buffered(&mut buf);
        buf
    }
}
  • トレイトには、必要なメソッドを実装すると、すでに実装済みのメソッドを 利用できるものがよくあります。

  • トレイトメソッドは、関数本体が存在する場合、デフォルト実装を持ちます。 この実装は、そのトレイト内の他のメソッドやスーパートレイトのメソッドなど、 利用可能な他のメソッドを用いて記述できます。

  • 多くの場合、実装に必要な大まかな機能を提供するメソッド(Ordcompare など)に対して、それらのメソッドを用いて実装できる関数 (Ordmax/min/clamp など)のデフォルト実装が用意されています。

  • derive マクロは実装内に任意の AST を生成するため、デフォルトメソッドは derive マクロによってオーバーライドできます。

参照:

  • https://doc.rust-lang.org/reference/items/traits.html#r-items.traits.associated-item-decls