如何在Rust中为两种类型定义同一功能的函数?
Rust中优化Trait重复实现的方案
你的代码中针对String和i32的display方法逻辑完全一致,重复编写impl块造成了冗余。可以通过泛型结合标准库的std::fmt::Display trait来实现统一处理,避免代码重复。
优化后的代码如下:
trait MyDisplay { fn display(self); } // 为所有实现了std::fmt::Display的类型统一实现MyDisplay impl<T: std::fmt::Display> MyDisplay for T { fn display(self) { println!("You wrote: {}", self); } } fn main() { let name: String = String::from("Tom Smykowski"); name.display(); let age: i32 = 22; age.display(); // 扩展支持其他实现了std::fmt::Display的类型 let score: f64 = 95.5; score.display(); }
说明:
- 将自定义trait命名为
MyDisplay是为了避免与标准库的std::fmt::Display重名,你也可以保留原名称,但容易造成混淆; - 通过泛型约束
T: std::fmt::Display,所有实现了标准库Display trait的类型(包括String、i32、f64、&str等)都会自动拥有display方法,无需逐个编写impl块; - 这种方式不仅消除了代码重复,还天然支持更多符合约束的类型,扩展性更强。
内容的提问来源于stack exchange,提问作者Tom Smykowski
相关产品推荐
相关产品推荐

