Кортежні структури
Якщо імена полів неважливі, ви можете використати структуру кортежу:
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!("Запитайте вченого-ракетника з 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
. - Значення пройшло певну перевірку під час створення, тому вам більше не потрібно перевіряти його знову при кожному використанні:
PhoneNumber(String)
абоOddNumber(u32)
.
- Число вимірюється в деяких одиницях: у наведеному вище прикладі
- Продемонструйте, як додати значення
f64
до типуNewtons
, отримавши доступ до єдиного поля в newtype.- Rust зазвичай не любить неявних речей, таких як автоматичне розгортання або, наприклад, використання логічних значень як цілих чисел.
- Перевантаження операторів обговорюється в день 3 (дженерики).
- Цей приклад є тонким посиланням на невдачу Mars Climate Orbiter.