Кортежні структури
Якщо імена полів неважливі, ви можете використати структуру кортежу:
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.