Rust:Trait 详解

Rust语言里不同的type(比如 struct, enum等)可以调用的函数主要包括本身实现的方法。此外,Rust也提供了trait来定义不同type所需的“common behavior”,以此简化代码。

1. 基本内容

定义trait:

一个trait里面可以包含多个method

trait Behavior {
    fn eat(&self){
        println!("真香")
    }
    fn make_sound(&self);

   }

对type实现trait:

以strcut为例,对struct实现trait,方式与实现struct方法类似。实现时可以选择 重写trait中的method,也可以选择不重写,直接使用trait中默认的method定义

struct Dog;
impl Behavior for Dog {
    fn make_sound(&self) {
        println!("汪!")
    }
}
struct Cat;
impl Behavior for Cat {
    fn make_sound(&self) {
        println!("喵~")
    }
}

结果:

实例化struct,调用trait

fn main(){
    let dog = Dog;
    let cat = Cat;

    dog.eat();
    dog.make_sound();

    cat.eat();
    cat.make_sound();
}
真香
汪!
真香
喵~

2. 一些高级玩法

把trait作为参数传给函数,让函数可以处理不同的type

fn feed(item: impl Behavior) {
    item.eat();
   }

feed(item:dog);
真香

不过,feed(item:impl Behavior)是简略写法,是种语法糖。完整的形式是:

fn feed<T: Behavior>(item: T) {
    item.eat();
   }

这也被称作 trait bond

可以在函数里绑定多个type

//语法糖
fn feed(item1:impl Behavior,item1:impl Behavior) {

//等价写法
fn feed<T: Behavior>(item1: T, item2: T){

一个type绑定多个trait

fn feed(item: impl Summary + Display) {

//等价
fn feed<T: Summary + Display>(item: T) {

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值