其他分享
首页 > 其他分享> > RUST速成-trait

RUST速成-trait

作者:互联网

说明

用关键字 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);
}

标签:point,i32,self,速成,let,RUST,trait,fn
来源: https://blog.csdn.net/weixin_44157620/article/details/120515402