目录
什么是 Rust 泛型与特性
- 泛型 (Generics):Rust 中用于定义类型参数的机制,允许函数、结构体等在多种类型上工作,增强代码复用性。
- 特性 (Traits):类似接口的抽象,定义一组行为(方法),类型通过实现特性来提供具体功能。
为什么要使用泛型与特性
- 代码复用:泛型减少重复代码。
- 类型安全:编译时检查类型约束。
- 灵活性:特性允许不同类型共享行为。
- 抽象能力:构建通用的库和框架。
泛型的基本用法
- 语法:使用
<T>
定义类型参数。 - 应用:
- 函数:
fn foo<T>(x: T)
. - 结构体:
struct Point<T>
. - 枚举:
enum Option<T>
.
1 2 3 | fn largest<T: PartialOrd>(a: T, b: T) -> T { if a > b { a } else { b } } |
特性的定义与实现
- 定义:使用
trait
关键字。 - 实现:使用
impl Trait for Type
。 - 默认方法:特性可提供默认实现。
1 2 3 4 5 6 7 8 9 10 11 12 | 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 子句:提高复杂约束的可读性。
1 2 3 | fn display<T: Printable>(item: T) { item.print(); } |
代码示例
泛型函数
1 2 3 4 5 6 7 8 | 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)); } |
运行结果:
1 2 | Max of 5 and 3: 5 Max of 2.5 and 1.5: 2.5 |
特性实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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()); } |
运行结果:
1 | Alice is 30 years old |
泛型与特性结合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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); } |
运行结果:
1 | Article: Rust Basics |
参考资料与出站链接
- 官方文档:
- 学习资源:
- 社区支持:
发表回复