Деструктуризация структуры
Деструктуризация структуры - это механизм, позволяющий
разобрать структуру на отдельные значения её полей
и связать их с переменными за одну операцию. Синтаксис
деструктуризации похож на создание литерала структуры,
но вместо значений указываются имена переменных.
Деструктуризацию можно применять в let-привязках,
в параметрах функций и в выражениях match.
Структура при этом должна быть заранее объявлена
с помощью ключевого слова struct.
Синтаксис
let StructName { field1, field2 } = struct_value;
Также можно переименовывать поля при деструктуризации
с помощью конструкции field: new_name:
let StructName { field1: a, field2: b } = struct_value;
Пример
Давайте объявим структуру Point с двумя полями
и деструктурируем её в переменные:
struct Point
{
x: i32,
y: i32,
}
fn main()
{
let p = Point { x: 1, y: 2 };
let Point { x, y } = p;
println!("x = {}, y = {}", x, y);
}
Результат выполнения кода:
x = 1, y = 2
Пример
Давайте деструктурируем структуру с переименованием полей в новые переменные:
struct Point
{
x: i32,
y: i32,
}
fn main()
{
let p = Point { x: 1, y: 2 };
let Point { x: a, y: b } = p;
println!("a = {}, b = {}", a, b);
}
Результат выполнения кода:
a = 1, b = 2
Пример
Давайте деструктурируем структуру прямо в параметре функции:
struct Point
{
x: i32,
y: i32,
}
fn print_point(Point { x, y }: Point)
{
println!("x = {}, y = {}", x, y);
}
fn main()
{
let p = Point { x: 1, y: 2 };
print_point(p);
}
Результат выполнения кода:
x = 1, y = 2
Пример
Давайте используем деструктуризацию в выражении
match для разбора структуры:
struct Point
{
x: i32,
y: i32,
}
fn main()
{
let p = Point { x: 1, y: 2 };
match p
{
Point { x: 0, y } => println!("on y axis, y = {}", y),
Point { x, y: 0 } => println!("on x axis, x = {}", x),
Point { x, y } => println!("x = {}, y = {}", x, y),
}
}
Результат выполнения кода:
x = 1, y = 2
Смотрите также
-
ключевое слово
struct,
которое объявляет структуру с именованными полями -
оператор
field access,
который позволяет обращаться к полям структуры через точку -
синтаксис
литерал структуры,
который создаёт значение структуры с указанием полей -
синтаксис
update syntax,
который создаёт структуру на основе другой с заменой полей