前言

trait特性是rust中比较重要的,类似于c++中的虚函数特性,但是从对象为主导,变成了以函数为主导,第一感觉rust像是面向函数式编程。

使用

可以先定义trait定义一组方法,然后绑定给不同的数据结构,然后可以根据数据结构的不同访问不同的方法,也有c++中类似于动态绑定的概念,但是要比继承简单很多。

示例:

trait Shape {
fn area(&self) -> f64;
}

struct Circle {
radius: f64,
}

struct Square {
side: f64,
}

impl Shape for Circle {
fn area(&self) -> f64 {
3.14 * self.radius * self.radius
}
}

impl Shape for Square {
fn area(&self) -> f64 {
self.side * self.side
}
}

fn print_area(shape: &dyn Shape) {
println!("Area: {}", shape.area());
}

fn main() {
let circle = Circle { radius: 5.0 };
let square = Square { side: 3.0 };
print_area(&circle);
print_area(&square);
}