Разбор структуры в Rust
Когда справа лежит структура, слева можно перечислить ее поля в фигурных скобках. Каждое имя сразу становится переменной с тем значением, которое было в поле. Так не нужно обращаться к полям через точку после проверки типа.
Если удобнее другое имя переменной, после
двоеточия пишут новое имя. Запись
age: years забирает поле age
в переменную years.
Разберем запись о пользователе:
struct User {
name: String,
age: u32,
}
fn main() {
let user = User {
name: String::from("Ann"),
age: 20,
};
let User { name, age: years } = user;
println!("{} {}", name, years);
}
На экране имя и число лет. Поле name
попало в одноименную переменную, а age
открылась как years.
Разбор структуры можно сочетать с match,
когда тип приходит из перечисления или
контейнера:
struct Point {
x: i32,
y: i32,
}
fn main() {
let p = Point { x: 1, y: 2 };
let label = match p {
Point { x: 0, y } => "axis",
Point { x, y: 0 } => "axis",
Point { .. } => "plane",
};
println!("{}", label);
}
Дана структура:
struct Book {
title: String,
pages: u32,
}
let book = Book {
title: String::from("Rust"),
pages: 400,
};
Разберите book на title и
pages и выведите оба значения.
Дана структура:
struct Pair {
left: i32,
right: i32,
}
let pair = Pair { left: 3, right: 4 };
Разберите с переименованием:
left: a и right: b, выведите
сумму a и b.
Скажите, что означает запись Point { .. }
в образце структуры.