【转】rust中impl关键字的用法(二)---What is the Impl keyword in Rust?
2021/11/24 23:39:50
本文主要是介绍【转】rust中impl关键字的用法(二)---What is the Impl keyword in Rust?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
原文: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这篇关于【转】rust中impl关键字的用法(二)---What is the Impl keyword in Rust?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?