Читатели като вас помагат в подкрепа на MUO. Когато правите покупка чрез връзки на нашия сайт, ние може да спечелим комисионна за партньор. Прочетете още.

Една ключова характеристика, която прави Rust мощен и по-привлекателен, е неговата поддръжка за структури. Структурите са съставни типове данни за групиране на свързани данни. Те ви позволяват да дефинирате потребителски типове данни с именувани полета, които подобряват организацията на кода и улесняват манипулирането на данни.

Можете да използвате структури за представяне на различни обекти, включително дефинирани от потребителя типове данни и конфигурации. Структурите са по-гъвкави от много други структури от данни. Способността им да капсулират свързани данни ги прави полезни, тъй като създават по-логичен модел на обекти от реалния свят.

Дефиниране на структури и структурни полета

Ще дефинирате структура, като използвате структура ключова дума, последвана от име за структурата. Следвайте това, като посочите имената на полетата на структурата и техните Типове данни на Rust вътре в чифт фигурни скоби.

instagram viewer
структураЛице {
име: низ,
възраст: u8,
е_студент: bool,
}

Това Лице struct има три полета. The име полето е низ, the възраст е 8-битово цяло число без знак и е_студент полето е булево.

Можете да използвате структурни литерали, за да създадете екземпляри на структура след дефиницията на структура. Структурните литерали указват стойностите на полетата на структурата.

позволявам човек = Лице {
име: низ::от("Джон"),
възраст: 27,
е_студент: вярно,
};

The човек променливата е екземпляр на Лице struct, създаден със структурен литерал. Този литерал инстанцира всички полета на структурата със стойности на съответния им тип данни.

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

Можете също да използвате функция конструктор, за да създадете екземпляр на структура.

импл Лице {
// Дефиниране на конструкторска функция `new`, която приема `name`, `age` и
// параметри `is_student`
fnнов(име: низ, възраст: u8, is_student: bool) -> себе си {
// Създайте нов екземпляр на структурата `Person` и инициализирайте нейните полета
// с предоставените стойности
себе си {
име,
възраст,
е_студент,
}
}
}

// Извикване на функцията конструктор `new` на структурата `Person` и присвояване на
// резултатен екземпляр на `person`
позволявам лице = Лице:: ново(низ::от("Джон"), 27, вярно);

Програмата по-горе дефинира конструктор за Лице структура с импл ключова дума. The нов конструкторът приема структурните полета като аргументи и връща нов екземпляр на структурата с инициализираните стойности.

Можете да създадете a Лице инстанция с нов конструктор, като му предава подходящи аргументи.

Достъп и промяна на структурни полета

Можете да осъществявате достъп и да променяте структурни полета, като използвате нотация с точка. Просто използвате точката (.), последван от името на полето за достъп или промяна на стойността му.

// деклариране на структура Person
структураЛице {
име: низ,
възраст: u8,
е_студент: bool,
}

fnосновен() {
// инстанциране на структура
позволяваммут човек = Лице {
име: низ::от("Джон"),
възраст: 27,
е_студент: вярно,
};

// отпечатване на полетата за име и възраст на структурата
println!(„Име: {}“, person.name);
println!(„Възраст: {}“, person.age);

// модифицирайте полето is_student
person.is_student = невярно;

println!(„Студент е: {}“, person.is_student);
}

Програмата създава структура, инстанцира структурата, отпечатва име, и възраст полета и променя е_студент поле преди да отпечатате полето.

Деклариране на методи за структури

За разлика от структури в C, можете да дефинирате методи на структури на Rust, които работят върху екземпляр. Методите са функции, които приемат препратка към структура за достъп и модифициране. Можете също да използвате нотацията с точка, за да извикате методите на структура и да получите достъп до тяхната функционалност.

Ето как можете да декларирате методи за структури и да използвате тези методи за извършване на операции:

структураЛице {
име: низ,
възраст: u8,
е_студент: bool,
}

импл Лице {
fnкажи здравей(&себе си) {
println!(„Здравейте, казвам се {} и съм на {} години.“, себе си.име,
себе си.възраст);
}

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

fnосновен() {
позволяваммут човек = Лице {
име: низ::от("Джон"),
възраст: 27,
е_студент: вярно,
};

person.say_hello();

person.have_birthday();

println!("Нова епоха: {}", person.age);
}

Програмата дефинира два метода за Лице структура The кажи здравей методът взема препратка към себе си и отпечатва поздрав, който включва името и възрастта на лицето. The имам_рожден ден методът приема променлива препратка към себе си и увеличава възрастта на човека.

Моделът на собственост на Rust оптимизира управлението на паметта

Структурите са многостранни структури от данни, действащи като нещо като минимален еквивалент на клас.

Както при другите структури от данни на Rust, трябва да следвате правилата за собственост на Rust, когато работите със структурни променливи. Моделът на собственост гарантира, че управлявате ефективно паметта във вашите програми, предотвратявайки често срещани проблеми като нулеви и висящи указатели.