目录
什么是 Rust 泛型与特性
- 泛型 (Generics):Rust 中用于定义类型参数的机制,允许函数、结构体等在多种类型上工作,增强代码复用性。
- 特性 (Traits):类似接口的抽象,定义一组行为(方法),类型通过实现特性来提供具体功能。
为什么要使用泛型与特性
- 代码复用:泛型减少重复代码。
- 类型安全:编译时检查类型约束。
- 灵活性:特性允许不同类型共享行为。
- 抽象能力:构建通用的库和框架。
泛型的基本用法
- 语法:使用
<T>
定义类型参数。 - 应用:
- 函数:
fn foo<T>(x: T)
. - 结构体:
struct Point<T>
. - 枚举:
enum Option<T>
.
fn largest<T: PartialOrd>(a: T, b: T) -> T {
if a > b { a } else { b }
}
特性的定义与实现
- 定义:使用
trait
关键字。 - 实现:使用
impl Trait for Type
。 - 默认方法:特性可提供默认实现。
trait Printable {
fn print(&self);
fn default_print(&self) { println!("Default"); } // 默认方法
}
struct Item(i32);
impl Printable for Item {
fn print(&self) {
println!("Item: {}", self.0);
}
}
泛型与特性的结合
- 约束:使用
T: Trait
指定泛型类型需实现某特性。 - 多重约束:
T: Trait1 + Trait2
。 - where 子句:提高复杂约束的可读性。
fn display<T: Printable>(item: T) {
item.print();
}
代码示例
泛型函数
fn max<T: PartialOrd>(a: T, b: T) -> T {
if a > b { a } else { b }
}
fn main() {
println!("Max of 5 and 3: {}", max(5, 3));
println!("Max of 2.5 and 1.5: {}", max(2.5, 1.5));
}
运行结果:
Max of 5 and 3: 5
Max of 2.5 and 1.5: 2.5
特性实现
trait Describable {
fn describe(&self) -> String;
}
struct Person {
name: String,
age: u32,
}
impl Describable for Person {
fn describe(&self) -> String {
format!("{} is {} years old", self.name, self.age)
}
}
fn main() {
let p = Person { name: String::from("Alice"), age: 30 };
println!("{}", p.describe());
}
运行结果:
Alice is 30 years old
泛型与特性结合
trait Summary {
fn summarize(&self) -> String;
}
struct Article {
title: String,
}
impl Summary for Article {
fn summarize(&self) -> String {
format!("Article: {}", self.title)
}
}
fn print_summary<T: Summary>(item: T) {
println!("{}", item.summarize());
}
fn main() {
let article = Article { title: String::from("Rust Basics") };
print_summary(article);
}
运行结果:
Article: Rust Basics
参考资料与出站链接
- 官方文档:
- 学习资源:
- 社区支持:
发表回复