在 Rust 中,Tuple(元組) 是一種可以打包多個不同型別的值在一起的資料結構。
與陣列(Array)不同的是:Tuple 可以容納不同型別的資料。
fn main() {
let employee = ("Molly", 32, "Marketing");//建立一個包含三個不同型別的元組。
println!("{:#?}", employee);//用 Debug 格式印出整個元組內容。
let name = employee.0;
let age = employee.1;
let department = employee.2;//使用「點索引法(.0, .1, .2)」取得各個元素。
println!("Name:{} , Age:{} , Department:{}", name, age, department);
let (name, age, department) = employee;//使用**解構(Destructuring)**方式一次取出所有元素。
println!("Name:{} , Age:{} , Department:{}", name, age, department);
}
項目 | Tuple(元組) | Array(陣列) |
---|---|---|
型別 | 可以不同型別 | 必須全部同型別 |
長度 | 固定 | 固定 |
存取方式 | 使用 .0 、.1 、.2 依序存取 |
使用 [索引] 存取 |
常見用途 | 小型異質資料組合(如 API 回傳值) | 大量同型別資料集合 |
可讀性 | 不如 Struct 清楚,依靠順序 | 比較清楚(資料同型且順序固定) |
在 Rust 中,Range(範圍) 是一種可以表示一連串「連續值」的資料結構,通常會搭配迴圈(Loop)來逐一處理範圍中的每個元素,而「迭代(Iteration)」的意思是逐一遍歷集合中的每個元素。
fn main() {
let month_days = 1..31;//建立一個從 1 到 30 的範圍(不包含 31)。
println!("{:?}", month_days);
let month_days1 = 1..=31;//建立一個從 1 到 31 的範圍(包含 31)。
println!("{:?}", month_days1);
for number in month_days {
println!("{}", number)//迴圈:依序印出從 1 到 30 的每個數字。
}
let letters = 'b'..='f';//建立從字元 'b' 到 'f' 的範圍(包含 'f')。
for letter in letters {
println!("{}", letter);
}
let colors = ["Red", "Green", "Yellow"];//建立一個字串陣列(不是範圍)。
for color in colors {
println!("{} is a great color!", color);//直接用 for 搭配陣列元素來遍歷。
}
}
在 Rust 中,泛型(Generic) 是一種「延遲決定型別」的語法,
意思是:我們可以先不指定具體型別,而是等到使用時再決定。
fn main() {
let month_days: std::ops::Range<i32> = 1..31;
let letters: std::ops::Range<char> = 'b'..'f';
}
這兩行程式中使用的是 Rust 標準庫裡的 Range:
Range 是一個範圍資料型別,使用泛型 T 來代表「範圍中的值的型別」。
這個 T 就是所謂的 泛型參數(Generic Type Parameter)。
std:Rust 的標準函式庫(standard library)名稱空間。幾乎所有常用型別與功能都來自這裡。
ops:模組名稱,全稱為 std::ops,代表「運算子支援模組」,定義了像 Range、Add、Mul 等。
Range:Range 是一個結構體(struct),用來表示某個型別的範圍;表示建立一個「i32 型別的範圍」,即從某個整數到某個整數的範圍。
Rust 並沒有傳統的物件導向(像 Java、C++ 那種 class-based OOP),但它實現了類似的核心概念。
OOP 概念 | Rust 對應 |
---|---|
多載(Overload) | ❌ Rust 沒有函數多載,但可以用泛型達到類似效果。 |
多型(Polymorphism) | ✅ 透過 Trait Bound 泛型限制(例如 T: Display )實現多型。 |
介面(Interface) | ✅ 對應 Trait,甚至更強大。 |