Трейты для полиморфизма, которые пользователи могут расширять
// 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 от них требует.
Такая возможность расширения мощна во многих областях: от сериализации до абстрактного представления аппаратуры и линейной алгебры с безопасностью типов.
- Если трейт открыт публично в крейте, пользователь, зависящий от этого крейта, может реализовать этот трейт для своих типов.