4.2.15 可被用户扩展的多态 Trait

15-可被用户扩展的多态 Trait — Comprehensive Rust

译文 · 基于 Comprehensive Rust

原文链接: https://google.github.io/comprehensive-rust/idiomatic/polymorphism/from-oop-to-rust/sticking-with-traits.html

4.2.15 可被用户扩展的多态 Trait

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0
// Crate A

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

// Crate B,依赖 A

pub struct Data(u8);

impl Trait for Data {}

fn main() {
    let data = Data(7u8);
    data.use_trait();
}
  • 普通 trait 我们已经讲过很多;与枚举和密封 trait 相比,它们允许用户通过实现 API 所要求的行为来扩展 API。

这种可扩展性在许多领域都很强大,从序列化到硬件的抽象表示,再到类型安全的线性代数。

  • 若 trait 在 crate 中公开暴露,依赖该 crate 的用户就可以为自己定义的类型实现该 trait。
最后修改 August 11, 2026: 更新 (70a5af133)