• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【转】rust中impl关键字的用法(二)---What is the Impl keyword in Rust?

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

 原文:https://www.educative.io/edpresso/what-are-traits-in-rust

-------------------------------------------

 

A trait in Rust is a group of methods that are defined for a particular type. Traits are an abstract definition of shared behavior amongst different types. So, in a way, traits are to Rust what interfaces are to Java or abstract classes are to C++. A trait method is able to access other methods within that trait.

Implementing a trait

A trait is implemented similarly to an inherent implementation except that a trait name and the for keyword follow the impl keyword before the type name. Let’s implement an built-in trait called ToString on a Dog struct:

struct Dog {
  name: String,
  age: u32, 
  owner: String
}


// Implementing an in-built trait ToString on the Dog struct
impl ToString for Dog {
  fn to_string(&self) -> String{
    return format!("{} is a {} year old dog who belongs to {}.", self.name, self.age, self.owner);
  }
}

fn main() {
  let dog = Dog{name: "Frodo".to_string(), age: 3, owner: "Maryam".to_string()};
  println!("{}", dog.to_string());
}

  

Defining a trait

Now that we know how to implement traits, we can get to defining traits ourselves. In the following program, we will define a Details trait on a Movie struct using the trait keyword:

 

struct Movie {
    title: String,
    director: String,
    release_year: u32, 
    genre: String
}

// Defining a Details trait by defining the functionality it should include
trait Details {
    fn description(&self) -> String;
    fn years_since_release(&self) -> u32;
}

// Implementing the Details trait on Movie struct
impl Details for Movie{

  // Method returns an overview of the movie
  fn description(&self) -> String{
    return format!("{}, released in {}, is a {} movie directed by {}.", self.title, self.release_year, self.genre, self.director);
  }

  // Method returns the number of years between the writing year of this shot i.e.
  // 2020 and the release year of the movie
  fn years_since_release(&self) -> u32{
    return 2020 - self.release_year;
  }
}

fn main() {
  let movie1 = Movie{
      title: "Titanic".to_string(),
      director: "James Cameron".to_string(),
      release_year: 1997,
      genre: "historical".to_string()
  };
  println!("{}", movie1.description());
  println!("The movie was released {} years ago.", movie1.years_since_release());

  let movie2 = Movie{
      title: "The Dark Knight".to_string(),
      director: "Christopher Nolan".to_string(),
      release_year: 2008,
      genre: "action".to_string()
  };
  println!("\n{}", movie2.description());
  println!("The movie was released {} years ago.", movie2.years_since_release());
}

  

CREATOR

Anusheh Zohair Mustafeez

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab滤波器的设计发布时间:2022-07-18
下一篇:
matlab实现hog特征发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap