Rust на примерах

3.1 Структуры

Существует три типа структур, которые можно создать с помощью ключевого слова struct:

  • Кортежная структура, которая, в общем, является именованным кортежем.
  • Классическую C структуру
  • Единичную (unit) структуру, которая не имеет полей, но может быть полезна для дженериков.
// Единичная структура
struct Nil;

// Кортежная структура
struct Pair(i32, f64);

// Структура с двумя полями
struct Point {
    x: f64,
    y: f64,
}

// Структуры могут быть использованы как поля другой структуры
#[allow(dead_code)]
struct Rectangle {
    p1: Point,
    p2: Point,
}

fn main() {
    // Создаем связь со структурой `Point`
    let point: Point = Point { x: 0.3, y: 0.4 };

    // Получаем доступ к полям структуры `point`
    println!("point coordinates: ({}, {})", point.x, point.y);

    // Деструктурируем `point` создавая связь с помощью `let`
    let Point { x: my_x, y: my_y } = point;

    let _rectangle = Rectangle {
        // инициализация стуктуры так же является выражением
        p1: Point { x: my_y, y: my_x },
        p2: point,
    };

    // Создаем связь с единичной структурой
    let _nil = Nil;

    // Создаем связь с кортежной структурой
    let pair = Pair(1, 0.1);

    // Деструктурируем кортежную структуру
    let Pair(integer, decimal) = pair;

    println!("pair contains {:?} and {:?}", integer, decimal);
}

Задание

  1. Добавьте функцию rect_area, которая рассчитывает площадь прямоугольника. (попробуйте использовать "деструктуризацию" (разбор на части) ).
  2. Добавьте функцию square, которая принимает в качестве аргументов Point и f32, а возвращает Rectangle with its lower left corner on the point, and a width and height corresponding to the f32.

Смотрите также:

attributes и destructuring