Rust-Trait 特征编程
昨夜江边春水生,艨艟巨舰一毛轻。
向来枉费推移力,此日中流自在行。
——《活水亭观书有感二首·其二》宋·朱熹
【哲理】往日舟大水浅,众人使劲推船,也是白费力气,而此时春水猛涨,巨舰却自由自在地飘行在水流中。
君子谋时而动,顺势而为。借助客观的事物之后,以往很难的事情也会变得简单。
一、Trait 特征介绍
在 Rust 编程语言中,特征(Traits)是一种定义共享行为的机制。它们类似于其他编程语言中的接口(Interfaces),用于描述一组方法,这些方法可以由不同类型实现。通过使用特征,可以定义某些类型必须提供的方法,从而实现多态和代码复用。
二、特征的定义
特征使用 trait
关键字来定义。以下是一个简单的特征示例:
trait Summary {
fn summarize(&self) -> String;
}
在这个例子中,Summary
特征定义了一个名为 summarize
的方法,该方法接受一个不可变引用 &self
并返回一个 String
。
三、实现特征
要让一个类型实现某个特征,需要使用 impl
关键字。以下是一个结构体及其对 Summary
特征的实现:
struct Article {
title: String,
content: String,
}
impl Summary for Article {
fn summarize(&self) -> String {
format!("{}: {}", self.title, self.content)
}
}
在这个例子中,Article
结构体实现了 Summary
特征,并提供了 summarize
方法的具体实现。
四、使用特征
实现了特征的类型可以通过特征的方法进行调用:
fn main() {
let article = Article {
title: String::from("Rust Programming"),
content: String::from("Rust is a systems programming language."),
};
println!("{}", article.summarize());
}
五、默认方法
特征还可以提供默认方法实现。如果某个类型没有提供特定方法的实现,则会使用默认实现:
trait Summary {
fn summarize(&self) -> String {
String::from("(Read more...)")
}
}
类型仍然可以选择覆盖默认实现: