デフォルトのメソッド実装
// 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 } }
-
トレイトには、必要なメソッドを実装すると、すでに実装済みのメソッドを 利用できるものがよくあります。
-
トレイトメソッドは、関数本体が存在する場合、デフォルト実装を持ちます。 この実装は、そのトレイト内の他のメソッドやスーパートレイトのメソッドなど、 利用可能な他のメソッドを用いて記述できます。
-
多くの場合、実装に必要な大まかな機能を提供するメソッド(
Ordのcompareなど)に対して、それらのメソッドを用いて実装できる関数 (Ordのmax/min/clampなど)のデフォルト実装が用意されています。 -
derive マクロは実装内に任意の AST を生成するため、デフォルトメソッドは derive マクロによってオーバーライドできます。
参照:
- https://doc.rust-lang.org/reference/items/traits.html#r-items.traits.associated-item-decls