タプル構造体

フィールド名が重要でない場合は、タプル構造体を使用できます。

struct Point(i32, i32);

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

これは多くの場合、単一フィールド ラッパー(ニュータイプと呼ばれます)に使用されます。

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.
  • ニュータイプは、プリミティブ型の値に関する追加情報をエンコードする優れた方法です。次に例を示します。
    • 数値はいくつかの単位で測定されます(上記の例では Newtons)。
    • この値は作成時に検証に合格したため、PhoneNumber(String) または OddNumber(u32) を使用するたびに再検証する必要はありません。
  • ニュータイプの 1 つのフィールドにアクセスして、Newtons 型に f64 の値を追加する方法を示します。
    • Rust では通常、不明瞭なこと(自動ラップ解除や、整数としてのブール値の使用など)は好まれません。
    • 演算子のオーバーロードについては、3 日目(ジェネリクス)で説明します。
  • この例は、マーズ クライメイト オービターの失敗を参考にしています。