Паттерн rest ..
Паттерн .. (rest pattern) используется
при деструктуризации структур в match,
let и других конструкциях сопоставления
с образцом. Он позволяет не перечислять все поля
структуры явно, а указать только нужные, проигнорировав
оставшиеся. Паттерн .. ставится в конце списка
полей и не принимает никаких параметров.
Синтаксис
StructName { field1, field2, .. }
Пример
Давайте создадим структуру с несколькими полями
и извлечём только первое поле, проигнорировав
остальные с помощью паттерна ..:
struct Point
{
x: i32,
y: i32,
z: i32,
}
fn main()
{
let p = Point { x: 1, y: 2, z: 3 };
let Point { x, .. } = p;
println!("{}", x);
}
Результат выполнения кода:
1
Пример
Давайте извлечём первое и последнее поля, проигнорировав среднее:
struct Point
{
x: i32,
y: i32,
z: i32,
}
fn main()
{
let p = Point { x: 1, y: 2, z: 3 };
let Point { x, z, .. } = p;
println!("{} {}", x, z);
}
Результат выполнения кода:
1 3
Пример
Давайте используем паттерн .. вместе
с match для обработки разных вариантов
структуры:
struct Point
{
x: i32,
y: i32,
}
fn main()
{
let p = Point { x: 0, y: 5 };
match p
{
Point { x: 0, .. } => println!("on y axis"),
Point { y: 0, .. } => println!("on x axis"),
Point { .. } => println!("somewhere else"),
}
}
Результат выполнения кода:
"on y axis"
Смотрите также
-
паттерн
destructure,
который выполняет деструктуризацию структуры -
паттерн
update-syntax,
который обновляет поля структуры из другой структуры -
конструкция
literal,
которая создаёт экземпляр структуры -
доступ к полям
field-access,
который позволяет обращаться к полям структуры