Кортежні структури

Якщо імена полів неважливі, ви можете використати структуру кортежу:

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.