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

// Крейт A

pub trait Trait {
    fn use_trait(&self) {}
}

// Крейт B, зависит от A

pub struct Data(u8);

impl Trait for Data {}

fn main() {
    let data = Data(7u8);
    data.use_trait();
}
  • Обычные трейты мы уже подробно рассмотрели, но по сравнению с перечислениями и sealed-трейтами они позволяют пользователям расширять API, реализуя поведение, которое API от них требует.

Такая возможность расширения мощна во многих областях: от сериализации до абстрактного представления аппаратуры и линейной алгебры с безопасностью типов.

  • Если трейт открыт публично в крейте, пользователь, зависящий от этого крейта, может реализовать этот трейт для своих типов.