Skip to content

类型系统概述

> 了解 Rust 类型系统的整体设计,理解静态类型与类型推断如何协同工作。

为什么需要类型系统?

类型是什么?

概念名称: 类型是数据的分类,告诉编译器数据的含义和可用操作。

想象你在整理房间:

没有类型的系统(动态类型):
┌─────────────────────────────────┐
│  一个大箱子,什么都往里装        │
│  用的时候才知道里面是什么        │
│  → 运行时错误                    │
└─────────────────────────────────┘

Rust 的类型系统(静态类型):
┌─────────┬─────────┬─────────────┐
│ 书籍箱  │ 衣物箱  │  厨具箱     │
│ 只能放书│ 只能放衣│  只能放厨具 │
│ → 编译时就知道对不对            │
└─────────┴─────────┴─────────────┘

为什么用它?

rust
// 没有类型:运行时才发现错误
let x = "10";
let y = 20;
let result = x + y;  // ❌ 运行时错误:字符串不能加数字

// 有类型:编译时就阻止
let x: i32 = 10;
let y: i32 = 20;
let result = x + y;  // ✅ 编译通过,类型安全
▶ Run

Rust 类型系统全景图

Rust 类型

├── 标量类型(Scalar)单个值
│   ├── 整数(integer): i32, u8, i64...
│   ├── 浮点数(float): f32, f64
│   ├── 布尔(boolean): bool
│   └── 字符(character): char

├── 复合类型(Compound)多个值组合
│   ├── 元组(tuple): (i32, String)
│   └── 数组(array): [i32; 5]

├── 字符串类型
│   ├── String(可增长字符串)
│   └── &str(字符串切片)

└── 其他类型(后续章节)
    ├── 结构体、枚举
    ├── 选项、结果
    └── 智能指针...

类型推断 vs 显式标注

概念名称: Rust 自动推断类型,但也可显式标注。

语法结构:
┌──────────────────────────────────────┐
│  let 变量 = 值;          → 推断类型   │
│  let 变量: 类型 = 值;    → 显式标注   │
│                                       │
│  let x = 42;    → 推断为 i32         │
│  let x: i64 = 42; → 显式指定 i64     │
└──────────────────────────────────────┘

最简示例

rust
fn main() {
    let x = 42;           // 推断为 i32
    let y: f64 = 3.14;    // 显式指定 f64
    println!("x={}, y={}", x, y);
}
▶ Run

详细示例

rust
fn main() {
    // 类型推断
    let x = 42;           // i32
    let y = 3.14;         // f64
    let s = "hello";      // &str
    let b = true;         // bool

    println!("x={} (i32), y={} (f64), s={} (&str), b={} (bool)", x, y, s, b);

    // 显式标注
    let a: i64 = 42;
    let c: u8 = 255;
    
    println!("a={} (i64), c={} (u8)", a, c);
}
▶ Run

关键代码说明:

代码含义为什么这样写
let x = 42类型推断为 i32i32 是 Rust 默认整数类型
let y: f64 = 3.14显式指定 f64浮点数默认 f64,显式标注更清晰
let c: u8 = 255无符号 8 位整数适合存储 0-255 的值

小结

  • Rust 是静态强类型语言,所有类型在编译时确定
  • 类型推断让代码简洁,显式标注使类型意图更清晰
  • 类型系统是防止运行时错误的第一道防线
  • Rust 类型分为:标量类型、复合类型、自定义类型

练习题

详见:练习题