Отдельный тип представляют структуры-кортежи (tuple structs). Как и структуры они определяются с помощью ключевого слова struct, но для их полей не указываются имена - только типы данных:
struct название_структуры { тип_поля1, тип_поля2, .... тип_поляN }
Например:
fn main(){ let start = Point(2, 4); let end = Point(2, 7); println!("Начало: (x={}, y={})", start.0, start.1); println!("Конец: (x={}, y={})", end.0, end.1); } struct Point(i32, i32);
В данном случае определена структура Point
, которая представляет условную точку на плоскости и состоит из двух координат - двух полей
типа i32
.
struct Point(i32, i32);
При инициализации переменной структуры ее полям передаются некоторые значения, которые соответствуют типу полей:
let start = Point(2, 4);
Для обращения к полям такой структуры применяется тот же подход, что и в кортежах - обращение идет по индексу полей. То есть для обращения к первому полю применяется индекс 0
start.0
Для обращения ко второму полю применяется индекс 1 и так далее
start.1
Консольный вывод программы:
Начало: (x=2, y=4) Конец: (x=2, y=7)
Могут быть и более сложные конструкции, когда одна структура-кортеж использует другие:
fn main(){ let start = Point(2, 4); let end = Point(2, 7); let dist = Distance(start, end); println!("Начало: ({},{})", dist.0.0, dist.0.1); println!("Конец: ({},{})", dist.1.0, dist.1.1); } struct Point(i32, i32); struct Distance(Point, Point);
Результат работы:
Начало: (2, 4) Конец: (2, 7)
Здесь структура-кортеж Distance использует другую структуру-кортеж Point. Соответственно чтобы обратитьсяк полям структуры Point внутри структры Distance, необходимо использовать два индекса:
dist.0.0
dist.0
указывает на первое поле структуры Distance, а dist.0.0
на первое поле стуктуры Point, которая представляет первое поле структуры Distance.