说明
用关键字 trait 定义一组函数,类似 Java 的 interface 或 C++的虚函数。
可以为一个类型实现某个 trait 。
为自定义类型实现trait
struct Point{
x: i32,
y: i32,
}
trait Adder {
fn get(&self) -> (i32, i32); // self 类似 Java 或 C++ 的 this,
fn add(&mut self, x0: i32, y0: i32); // 可以修改 self 的 函数
fn test0(); // 没有 self 的函数
}
impl Adder for Point {
fn get(&self) -> (i32, i32) {
return (self.x, self.y);
}
fn add(&mut self, x0: i32, y0: i32) {
self.x += x0;
self.y += y0;
}
fn test0() {
println!("test0() without self");
}
}
fn main() {
Point::test0(); // 没有 self 的调用,类似 Java 调用 static 成员函数
let point = Point{x: 1, y: 2};
let (x, y) = point.get();
println!("point.get() return {}, {}", x, y);
let mut point = Point{x: 3, y: 4}; // 变量要声明成 mut
point.add(1, 2);
println!("point.add() result {}, {}", point.x, point.y);
}
为内嵌类型实现 trait
trait T1 {
fn test1(&self, h: i32) -> i32; // self 类似 Java 或 C++ 的 this
}
impl T1 for i32 {
fn test1(&self, h: i32) -> i32{
let result = self + h;
return result;
}
}
fn main() {
let v: i32 = 100;
let r = v.test1(1);
println!("test1() return {}", r);
}