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