RUST速成-trait

说明

用关键字 trait 定义一组函数,类似 Java 的 interface 或 C++的虚函数。

Rust 的 trait 和 数据类型(struct)的定义是分开的。

可以为一个类型实现1个 trait 或 多个 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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值