В предыдущей статье мы обсуждали модули в ржавчине. Теперь перейдем к структурам.
TL;DR
- Что такое структуры?
- Базовая структура
- Присвоение значений структуре
- Доступ к значениям в структуре
- Атрибуты, используемые в структурах
- Поля с типами данных String
- Структура с кортежем
- Использование структуры в поле другой структуры
Во-первых, давайте начнем с создания нового проекта под названием «Структура» с помощью следующей команды.
cargo new Structure --bin
Что такое структуры?
Rust не является объектно-ориентированным языком программирования, поэтому в нем нет концепции объектов и классов. Структуры в Rust действуют как объекты и в сочетании с трейтами могут вместе работать как класс с методами, определенными под ним. Мы узнаем больше о чертах характера в следующей статье.
Базовые конструкции
Структуры в rust, похожие на другие языки программирования, представляют собой набор похожих или разных типов данных для создания типа данных, определяемого пользователем.
Вот синтаксис для определения структуры
pub struct <struct name>{ <field name>:<datatype>, <field name>:<datatype> }
По умолчанию структуры являются частными, используйте «pub», чтобы сделать их общедоступными.
Определение структуры
Присвоение значений структуре
Чтобы присвоить значения структуре, нам нужно создать новый экземпляр структуры, аналогично созданию экземпляра объекта в языках программирования на основе ООП.
Поскольку переменная «c» не определена как изменяемая, значения не могут быть изменены.
Доступ к значениям в структуре
Значок "." Оператор используется для доступа к значениям в структуре.
Вот синтаксис для доступа к значениям в структуре
<struct var>.<filed name>
Чтобы изменить значения, присвоенные в структуре, нам нужно объявить переменную структуры как изменяемый тип.
Вот код для изменения значения синего цвета
Структура с кортежем
Структуры, определенные с помощью кортежа, не имеют имен полей.
Вот синтаксис
struct <struct name>(<datatype1>,<datatype2>,<datatype3>)
Для доступа к этим элементам мы используем символ «.» но вместо имени поля, как в предыдущем случае, мы используем index.
Атрибуты, используемые в структурах
Атрибуты - это теги, которые вы можете использовать для добавления метаданных, которые могут помочь изменить выполнение вашего кода. Каждая функция, структура может иметь свои собственные атрибуты.
Есть 2 основных атрибута, которые обычно используются для структур.
- # [разрешить (dead_code)]
- # [derive (Debug)]
# [allow (dead_code)]
Используется, когда структура объявлена, но не используется.
Рассмотрим следующий код. Здесь структура «цвет» объявляется, но не вызывается. Если этот код выполняется, компилятор выдает предупреждение «# [warn (dead_code)]»
Чтобы избежать этого предупреждения, мы можем добавить # [allow (dead_code)] в обе наши структуры
# [derive (Debug)]
Позволяет нам распечатать всю структуру, а не только поля.
Если вы попытались напечатать всю структуру с помощью «println! ({:?},‹ Struct var ›)», это выдаст ошибку. Чтобы напечатать всю структуру вместо одного поля, мы можем использовать этот атрибут.
Поля со строковыми типами данных
Передача строки как типа данных обычно в структуру, подобную целому числу, как показано выше, вызовет ошибку.
Приведенный выше код неверен. Это связано с тем, что ссылка на строку потеряна, т.е. строка выходит за рамки при объявлении или использовании структуры.
Есть два способа исправить это:
Определение области действия для структуры
Мы используем "a" используется для определения области действия
Использование String :: from ()
Второй метод - определить строку с помощью встроенного класса String вместо указателя на строку.
Вот как будет выглядеть приведенный выше код
Использование структуры в поле другой структуры
Рассмотрим следующий случай, когда есть две структуры «Человек», которые содержат личную информацию, и Сотрудник, который содержит информацию о сотрудниках. Сотрудник использует структуру Person для заполнения личных данных сотрудников.
Примечание: «# [derive (Debug)]» необходимо использовать в обеих структурах, чтобы полностью распечатать структуру Employee.
В следующей статье мы поговорим о чертах и их реализациях.
ссылка на следующую статью
Ссылка на предыдущую статью