元組結構體
如果欄位名稱不重要,您可以使用元組結構體:
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)
orOddNumber(u32)
.
- 此數字會採用某些測量單位:在上例中為
- 示範如何透過存取 newtype 中的單一欄位,將 “f64” 值新增至
Newtons
類型。- Rust 通常不太能接受不明確的內容,例如自動展開或使用布林值做為整數。
- 運算子超載會在第 3 天 (泛型) 討論。
- 此範例巧妙地以 Mars Climate Orbiter 的失敗經驗做為參照。