Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

Одной из ключевых особенностей, делающих Rust мощным и привлекательным, является поддержка структур. Структуры — это составные типы данных для группировки связанных данных. Они позволяют определять пользовательские типы данных с именованными полями, что улучшает организацию кода и упрощает работу с данными.

Вы можете использовать структуры для представления различных объектов, включая определяемые пользователем типы данных и конфигурации. Структуры более гибкие, чем многие другие структуры данных. Их способность инкапсулировать связанные данные делает их полезными, поскольку они создают более логичную модель объектов реального мира.

Определение структур и полей структуры

Вы определите структуру, используя структура ключевое слово, за которым следует имя структуры. После этого укажите имена полей структуры и их Типы данных Rust внутри пары фигурных скобок.

instagram viewer
структураЧеловек {
имя: Нить,
возраст: U8,
is_student: логический,
}

Этот Человек структура имеет три поля. имя поле представляет собой строку, возраст поле представляет собой 8-битное целое число без знака, а поле is_student поле является логическим.

Вы можете использовать литералы структуры для создания экземпляров структуры после определения структуры. Литералы структуры определяют значения полей структуры.

позволять человек = человек {
имя: Нить::от("Джон"),
возраст: 27,
is_student: истинный,
};

человек переменная является экземпляром Человек struct, созданная с помощью литерала структуры. Этот литерал инстанцирует все поля структуры со значениями соответствующего типа данных.

Использование конструкторов для создания структур

Вы также можете использовать функцию конструктора для создания экземпляра структуры.

импл Человек {
// Определяем функцию-конструктор `new`, которая принимает `name`, `age` и
// параметры `is_student`
фнновый(имя: Нить, возраст: U8, is_student: логический) -> Себя {
// Создаем новый экземпляр структуры `Person` и инициализируем его поля
// с предоставленными значениями
Себя {
имя,
возраст,
is_student,
}
}
}

// Вызываем функцию конструктора `new` структуры `Person` и присваиваем
// результирующий экземпляр в `person`
позволять человек = человек:: новый(Нить::от("Джон"), 27, истинный);

Программа выше определяет конструктор для Человек структура с импл ключевое слово. новый конструктор принимает поля структуры в качестве аргументов и возвращает новый экземпляр структуры с инициализированными значениями.

Вы можете создать Человек пример с новый конструктор, передавая ему соответствующие аргументы.

Доступ и изменение полей структуры

Вы можете получить доступ к полям структуры и изменить их, используя запись через точку. Вы просто используете точку (.) с последующим именем поля для доступа или изменения его значения.

// объявляем структуру Person
структураЧеловек {
имя: Нить,
возраст: U8,
is_student: логический,
}

фносновной() {
// создать экземпляр структуры
позволятьмут человек = человек {
имя: Нить::от("Джон"),
возраст: 27,
is_student: истинный,
};

// вывести поля имени и возраста структуры
распечатать!("Имя: {}", лицо.имя);
распечатать!("Возраст: {}", чел.возраст);

// изменить поле is_student
человек.is_student = ЛОЖЬ;

распечатать!("Ученик: {}", человек.это_ученик);
}

Программа создает структуру, создает экземпляр структуры, печатает имя, и возраст поля и изменяет is_student поле перед печатью поля.

Объявление методов для структур

В отличие от структуры в C, вы можете определить методы структур Rust, которые работают с экземпляром. Методы — это функции, которые берут ссылку на структуру для доступа и модификации. Вы также можете использовать запись через точку для вызова методов структуры и доступа к их функциям.

Вот как вы можете объявить методы для структур и использовать эти методы для выполнения операций:

структураЧеловек {
имя: Нить,
возраст: U8,
is_student: логический,
}

импл Человек {
фнскажи привет(&себя) {
распечатать!("Здравствуйте, меня зовут {}, мне {} лет.", себя.имя,
себя.возраст);
}

фндень рождения(&мутсебя) {
себя.возраст += 1;
}
}

фносновной() {
позволятьмут человек = человек {
имя: Нить::от("Джон"),
возраст: 27,
is_student: истинный,
};

человек.скажи_привет();

person.have_birthday();

распечатать!("Новый век: {}", чел.возраст);
}

Программа определяет два метода для Человек структура. скажи привет метод принимает ссылку на себя и печатает приветствие, включающее имя и возраст человека. день рождения метод принимает изменяемую ссылку на себя и увеличивает возраст человека.

Модель владения Rust оптимизирует управление памятью

Структуры — это универсальные структуры данных, действующие как своего рода минимальный эквивалент класса.

Как и в случае с другими структурами данных Rust, вы должны следовать правилам владения Rust при работе с структурными переменными. Модель владения гарантирует, что вы эффективно управляете памятью в своих программах, предотвращая распространенные проблемы, такие как пустые и висячие указатели.