Rust 泛型与特性:万能武功
泛型 (Generics) 让我们可以编写适用于多种类型的代码。特性 (Traits) 定义了类型必须具有的功能(类似于接口)。
🧬 泛型函数
使用 <T> 来代表任意类型。
// 这个函数可以打印任何实现了 Display trait 的类型
use std::fmt::Display;
fn print_it<T: Display>(item: T) {
println!("打印内容: {}", item);
}
fn main() {
print_it(100); // i32
print_it("Hello"); // &str
}
📜 定义 Trait (特性)
Trait 告诉编译器:这个类型能做什么。
// 定义一个“吵架”特性
trait Quarrel {
fn shout(&self) -> String;
}
struct Official {
name: String,
}
// 为 Official 实现 Quarrel
impl Quarrel for Official {
fn shout(&self) -> String {
format!("{}:凭什么抓我!", self.name)
}
}
🔗 Trait Bound (特性约束)
我们可以限制泛型必须实现某些 Trait。
fn battle<T: Quarrel>(fighter: T) {
println!("战斗开始: {}", fighter.shout());
}
🎁 where 子句
当约束太长时,用 where 会更清晰。
fn some_function<T, U>(t: T, u: U) -> i32
where T: Display + Clone,
U: Clone + Debug
{
// ...
0
}