Распаковка структуры в кортеж l-значения в Rust - PullRequest
0 голосов
/ 29 апреля 2019

У меня следующая структура:

struct Pixel{x:f64, y:f64, dx:f64, dy:f64}

Я получил эту структуру в качестве аргумента в функцию.Я хочу уменьшить объем печати и распаковать его:

fn foo(pixel:Pixel){
    let (x, y, dx, dy) = pixel;
}

Этот код не компилируется.Есть ли синтаксис сахара, чтобы избежать бесконечных pixel.x, pixel.dx и т. Д.?Я хочу иметь какой-то простой способ «извлечь» (псевдоним) значения структуры в мою функцию.И я хочу избежать многословия let x = pixel.x; let dx = pixel.dx и т. Д.

Есть ли краткий способ сделать это?

1 Ответ

2 голосов

Внимательное чтение главы 18 Здесь рекомендуется язык программирования Rust . Можно использовать сопоставление с образцом для деструктурирования массивов, перечислений, структур и кортежей.

let Pixel { x, y, dx, dy } = pixel;

Это может даже использоваться в аргументах параметров функции.

fn foo(Pixel { x, y, dx, dy }: Pixel) {

}
...