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 申明导入使用。