Структуры-кортежи

Последнее обновление: 12.04.2021

Отдельный тип представляют структуры-кортежи (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.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850