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的用法是基本一致的。

未完待續...

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章