Trait 对象与动态分发
dyn Trait:何时用、对象安全限制
本节你将能
使用 dyn Trait 做异构集合,并说明对象安全的基本限制。
直觉模型
泛型像「编译期复印多份说明书」;trait 对象像「运行时按虚表查该调用谁」——灵活但有间接成本。
核心要点
Box<dyn Summary>可装不同具体类型- 对象安全:方法不能返回
Self等(简化理解) - 热路径优先泛型;插件/UI 组件列表等场景适合 dyn
fn notify_all(items: &[Box]) {
for i in items { println!("{}", i.summarize()); }
}
常见误区
无差别全部改成 dyn——丢失内联与单态化优化。
动手
用 Vec<Box<dyn Draw>> 存放圆形与矩形并统一 draw。
互动
完成测验;第五章进入并发。
本节小结
泛型与 dyn 是同一抽象的两种落地方式。