跳到主要内容

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); }
}

与 Go 的对照

  • Trait 类似 Go 的接口,但支持默认实现、关联类型、泛型约束等更强表达力。
  • Rust 泛型为单态化(编译期生成具体版本),零开销抽象;Go 1.18+ 泛型为字典式或其他策略实现,性能模型不同。