rust trait 使用概念

由于rust属于编译型静态语言,所以trait 这种用于修饰类都需要导入,才能使用该trait。函数和操作符等都适用。

简而言之:需要该类实现std::ops::Add这个trait,并在使用的地方use结构体,并usestd::ops::Add 才能使用重载后的+操作符。

代码例子point.rs:

use std::ops::Add;

#[derive(Debug, Copy, Clone, PartialEq)]
struct Point {
    x: i32,
    y: i32,
}

impl Add for Point {
    type Output = Self;

    fn add(self, other: Self) -> Self {
        Self {
            x: self.x + other.x,
            y: self.y + other.y,
        }
    }
}

错误使用例子main.rs:

let A: Point = { x : 1 , y : 2};
let B: Point = { x : 1 , y : 2};
let C= A + B; //编译错误

头部增加一句即可编译:

use std::ops::Add; 

即rust并不能推断这结构体实现了Add没有,也并没有RTTI得到结构体相关信息。要用都必须在编译期,用use导入才可以。当然mod包可以通过mod.rs 申明导入使用。