В предыдущей статье мы обсуждали модули в ржавчине. Теперь перейдем к структурам.

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.

В следующей статье мы поговорим о чертах и ​​их реализациях.

ссылка на следующую статью



Ссылка на предыдущую статью