Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

型別別名

本集目標

學會用 type 為型別建立別名,讓複雜的泛型型別變得更好讀。

概念說明

隨著我們學了泛型,型別會越來越複雜。比如一個三維的資料結構:

Vec<Vec<Vec<i32>>>

每次都寫完整型別有點累,而且不好讀。Rust 提供了 type 關鍵字來建立型別別名

type Grid3D = Vec<Vec<Vec<i32>>>;

fn main() {}

從此以後,Grid3DVec<Vec<Vec<i32>>> 就是同一個型別——只是換了個名字。它不會建立新型別,就只是一個簡寫。

簡單的別名

type Name = String;

fn main() {}

NameString 完全等價,可以互換使用。

帶參數的型別別名

型別別名也可以帶泛型參數:

type Pair<T> = (T, T);

fn main() {}

這樣 Pair<i32> 就等於 (i32, i32)Pair<String> 就等於 (String, String)

注意

型別別名只是簡寫,不是新型別。NameString 完全可以互換使用,編譯器視它們為同一個型別。

範例程式碼

// 簡單的型別別名
type Name = String;

// 簡化複雜的巢狀型別
type Grid3D = Vec<Vec<Vec<i32>>>;

// 帶泛型參數的別名
type Pair<T> = (T, T);

fn main() {
    // Name 就是 String
    let greeting: Name = String::from("你好");
    println!("{}", greeting);

    // 三維 Vec 用別名就很清爽
    let mut grid: Grid3D = vec![vec![vec![0; 3]; 3]; 3];
    grid[1][1][1] = 42;
    println!("grid[1][1][1] = {}", grid[1][1][1]);

    // Pair<i32> 就是 (i32, i32)
    let point: Pair<i32> = (3, 7);
    println!("{:?}", point);

    let coords: Pair<f64> = (1.5, 3.7);
    println!("{:?}", coords);
}

重點整理

  • type Name = ExistingType; 建立型別別名,只是簡寫,不是新型別
  • 型別別名可以帶泛型參數:type Pair<T> = (T, T);
  • 常見用途:簡化複雜的巢狀型別(如 Vec<Vec<Vec<i32>>>
  • 別名和原型別完全等價,可以互換使用