traits-generics
Traits 与泛型
Traits(接口约束)
trait Area { fn area(&self) -> f64; }
struct Circle { r: f64 }
impl Area for Circle { fn area(&self) -> f64 { std::f64::consts::PI * self.r * self.r } }
fn print_area<T: Area>(t: &T) { println!("area={}", t.area()); }
fn main() { print_area(&Circle { r: 2.0 }); }
where 语法与多个约束
fn combine<T, U>(t: T, u: U) -> String
where
T: ToString,
U: ToString,
{
format!("{}-{}", t.to_string(), u.to_string())
}
关联类型与迭代器示例
trait MyIter {
type Item;
fn next(&mut self) -> Option<Self::Item>;
}
动态分发(Trait Object)
fn draw_all(items: &[&dyn std::fmt::Display]) {
for it in items { println!("{}", it); }
}