Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Реализации методов по умолчанию

// 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
    }
}
  • У трейтов часто есть методы, которые уже реализованы за вас, как только вы реализуете обязательные методы.

  • У метода трейта есть реализация по умолчанию, если присутствует тело функции. Эта реализация может быть выражена через другие доступные методы, например через другие методы того же трейта или методы супертрейта.

  • Часто встречаются методы, которые задают основную функциональность (например, compare у Ord), и методы, которые можно выразить через них, с реализациями по умолчанию (например, max/min/clamp у Ord).

  • Методы по умолчанию могут быть переопределены макросами derive, так как они порождают произвольные синтаксические деревья в реализации.

Справка:

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