元組結構體

如果欄位名稱不重要,您可以使用元組結構體:

struct Point(i32, i32);

fn main() {
    let p = Point(17, 23);
    println!("({}, {})", p.0, p.1);
}

這通常用於單一欄位的包裝函式 (稱為 newtypes):

struct PoundsOfForce(f64);
struct Newtons(f64);

fn compute_thruster_force() -> PoundsOfForce {
    todo!("Ask a rocket scientist at NASA")
}

fn set_thruster_force(force: Newtons) {
    // ...
}

fn main() {
    let force = compute_thruster_force();
    set_thruster_force(force);
}
This slide should take about 10 minutes.
  • 如要對原始型別中值的額外資訊進行編碼,Newtypes 是絕佳的方式,舉例來說:
    • 此數字會採用某些測量單位:在上例中為 Newtons
    • The value passed some validation when it was created, so you no longer have to validate it again at every use: PhoneNumber(String) or OddNumber(u32).
  • 示範如何透過存取 newtype 中的單一欄位,將 “f64” 值新增至 Newtons 類型。
    • Rust 通常不太能接受不明確的內容,例如自動展開或使用布林值做為整數。
    • 運算子超載會在第 3 天 (泛型) 討論。
  • 此範例巧妙地以 Mars Climate Orbiter 的失敗經驗做為參照。