langShift

类型系统与特征

学习 Rust 的静态类型系统、特征(Traits)和泛型,对比 JavaScript 的动态类型系统

类型系统与特征

📖 学习目标

理解 Rust 的静态类型系统和特征系统,学会使用泛型和特征约束,对比 JavaScript 的动态类型系统。


🎯 类型系统对比

JavaScript 的动态类型

JavaScript 是动态类型语言,类型在运行时确定:

正在加载...

Rust 的静态类型

Rust 是静态类型语言,类型在编译时确定:

正在加载...

类型系统差异

  1. 静态 vs 动态: Rust 编译时检查类型,JavaScript 运行时检查
  2. 类型安全: Rust 防止类型错误,JavaScript 允许类型转换
  3. 性能: Rust 零成本抽象,JavaScript 有运行时开销
  4. 开发体验: Rust 编译时错误提示,JavaScript 运行时错误

🔧 特征(Traits)系统

特征定义与实现

正在加载...

特征与 JavaScript 接口对比

正在加载...

🔄 泛型编程

泛型函数和结构体

正在加载...

特征约束和关联类型

正在加载...

🎯 练习题

练习 1: 实现特征

为以下结构体实现 DisplayDebug 特征:

struct Point {
x: f64,
y: f64,
}
查看答案
use std::fmt;
struct Point {
x: f64,
y: f64,
}
impl fmt::Display for Point {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "({}, {})", self.x, self.y)
}
}
impl fmt::Debug for Point {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Point {{ x: {}, y: {} }}", self.x, self.y)
}
}
fn main() {
let point = Point { x: 3.0, y: 4.0 };
println!("显示: {}", point);
println!("调试: {:?}", point);
}

练习 2: 泛型函数

创建一个泛型函数,可以比较两个值的大小:

查看答案
fn compare<T: PartialOrd>(a: &T, b: &T) -> std::cmp::Ordering {
a.partial_cmp(b).unwrap_or(std::cmp::Ordering::Equal)
}
fn main() {
let result1 = compare(&5, &3);
println!("5 与 3 比较: {:?}", result1); // Greater
let result2 = compare(&"apple", &"banana");
println!("apple 与 banana 比较: {:?}", result2); // Less
let result3 = compare(&3.14, &3.14);
println!("3.14 与 3.14 比较: {:?}", result3); // Equal
}

练习 3: 特征对象

创建一个特征对象,可以存储不同类型的可打印对象:

查看答案
trait Printable {
fn print(&self);
}
struct Book {
title: String,
}
impl Printable for Book {
fn print(&self) {
println!("书: {}", self.title);
}
}
struct Movie {
title: String,
}
impl Printable for Movie {
fn print(&self) {
println!("电影: {}", self.title);
}
}
fn main() {
let items: Vec<Box<dyn Printable>> = vec![
Box::new(Book { title: "Rust 编程".to_string() }),
Box::new(Movie { title: "Rust 纪录片".to_string() }),
];
for item in items {
item.print();
}
}

📝 总结

在这一章中,我们学习了 Rust 的类型系统和特征:

  1. 静态类型: Rust 在编译时检查类型,防止运行时错误
  2. 特征系统: 提供接口抽象,支持多态编程
  3. 泛型编程: 编写可重用的类型无关代码
  4. 特征约束: 限制泛型类型必须实现的特征
  5. 与 JavaScript 对比: 编译时安全 vs 运行时灵活性

关键要点

  • Rust 的类型系统提供编译时安全保障
  • 特征系统是 Rust 多态的核心机制
  • 泛型允许编写类型无关的通用代码
  • 特征约束确保类型具有所需的行为

下一步学习

在下一章中,我们将学习 Rust 的错误处理机制,了解如何使用 ResultOption 类型。


继续学习: 错误处理与类型安全