Rust基础知识-trait

      trait的中文翻译是特性,初次接触rust的trait概念,有点抽象,什么是特性? 其实trait的行为和C++/java中的虚函数/接口概念非常类似。站在这个角度去理解trait立马恍然大悟了。

     我们先从定义入手比较trait和接口的异同点。

     用trait定义一个animal

     pub trait animal{

          fn eat(&self, food : String)->bool;

          fn talk(&self, content : String)->String;

          fn run(&self);

  }

 Java定义这个接口

  public interface animal{

        bool eat(String food);

        String talk(String content);

        void run();

}

是不是貌离而神合?抓住编程语言本质,就会发现很多语言设计思想是想通的。再看看实现情况:

Rust:

首先定义一种动物:Rabbit

pub struct Rabbit{

      weight: u32;

      age : u32;

      color: u8;

      foods: Vec<String>;

}

然后实现接口:

 impl animal for Rabbit{

          fn eat(&self, food : String)->bool {

              let ret = false;

               for i in self.foods{

                  if foods[i] === food{

                  ret = true;

                  break;

                 }

               }

              ret

         }

          fn talk(&self, content : String)->String{

               let ret = "i am a rabbit";

               ret

          }

          fn run(&self){

          }

}

Java的接口实现:

 

class Rabbit implements Animal{

      private ArrayList<String>  foods;



      public Rabbit(ArrayList<String>  foods){

            this.foods = foods;

     }

       bool eat(String food){

           return foods.indexOf(food) != -1;

       }

        String talk(String content){

           return "I am a rabbit";

       }

        void run(){

        }

}

通过对比发现在Java和Rust中trait和interface的用法是基本一致的。

未完待续...

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值