类型系统与特征
学习 Rust 的静态类型系统、特征(Traits)和泛型,对比 JavaScript 的动态类型系统
类型系统与特征
📖 学习目标
理解 Rust 的静态类型系统和特征系统,学会使用泛型和特征约束,对比 JavaScript 的动态类型系统。
🎯 类型系统对比
JavaScript 的动态类型
JavaScript 是动态类型语言,类型在运行时确定:
正在加载...
Rust 的静态类型
Rust 是静态类型语言,类型在编译时确定:
正在加载...
类型系统差异
- 静态 vs 动态: Rust 编译时检查类型,JavaScript 运行时检查
- 类型安全: Rust 防止类型错误,JavaScript 允许类型转换
- 性能: Rust 零成本抽象,JavaScript 有运行时开销
- 开发体验: Rust 编译时错误提示,JavaScript 运行时错误
🔧 特征(Traits)系统
特征定义与实现
正在加载...
特征与 JavaScript 接口对比
正在加载...
🔄 泛型编程
泛型函数和结构体
正在加载...
特征约束和关联类型
正在加载...
🎯 练习题
练习 1: 实现特征
为以下结构体实现 Display
和 Debug
特征:
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); // Greaterlet result2 = compare(&"apple", &"banana");println!("apple 与 banana 比较: {:?}", result2); // Lesslet 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 的类型系统和特征:
- 静态类型: Rust 在编译时检查类型,防止运行时错误
- 特征系统: 提供接口抽象,支持多态编程
- 泛型编程: 编写可重用的类型无关代码
- 特征约束: 限制泛型类型必须实现的特征
- 与 JavaScript 对比: 编译时安全 vs 运行时灵活性
关键要点
- Rust 的类型系统提供编译时安全保障
- 特征系统是 Rust 多态的核心机制
- 泛型允许编写类型无关的通用代码
- 特征约束确保类型具有所需的行为
下一步学习
在下一章中,我们将学习 Rust 的错误处理机制,了解如何使用 Result
和 Option
类型。
继续学习: 错误处理与类型安全