元组结构体
如果字段名称不重要,您可以使用元组结构体:
struct Point(i32, i32); fn main() { let p = Point(17, 23); println!("({}, {})", p.0, p.1); }
这通常用于单字段封装容器(称为 newtype):
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.
- 如需对基元类型中的值的额外信息进行编码,使用 newtype 是一种非常好的方式,例如:
- 数字会以某些单位来衡量:上方示例中为
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 天(泛型)讨论。
- 此示例巧妙地引用了火星气候探测者号 的失败事故。