タプル構造体
フィールド名が重要でない場合は、タプル構造体を使用できます。
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 日目(ジェネリクス)で説明します。
- この例は、マーズ クライメイト オービターの失敗を参考にしています。