【转】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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2016-11-24 准备着手学习python
2016-11-24 初次stack-overflow 提交答案
2016-11-24 Stack-overflow, how to answer
2016-11-24 curl 测试web站点的响应时间
2016-11-24 直接用postman测试api ,服务器端没提供跨域也可以访问。
2016-11-24 国内的cdn
2016-11-24 tcpdump抓包并保存成cap文件