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 Animal {
    /* методы, общие для всех животных */
}

pub trait Mammal: Animal {
    /* методы только для млекопитающих */
}

// Из стандартной библиотеки

pub trait Ord: Eq + PartialOrd {
    /* методы для Ord */
}
  • Определяя трейт, можно указать, какие трейты тип тоже обязан реализовать. Такие трейты называются супертрейтами.

    В примере выше любой тип, реализующий Mammal, также обязан реализовать Animal.

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

  • Это отличается от наследования объектов! Но выглядит похоже.

    • Наследование объектов позволяет переопределять методы и по умолчанию перенимает поведение унаследованных типов.

    • То, что у трейта есть супертрейт, не означает, что этот трейт может переопределять реализации методов как реализации по умолчанию.

Справка:

  • https://doc.rust-lang.org/reference/items/traits.html?highlight=supertrait#r-items.traits.supertraits