Структуры
Syntax
Struct →
StructStruct
| TupleStruct
StructStruct →
struct IDENTIFIER GenericParams? WhereClause? ( { StructFields? } | ; )
TupleStruct →
struct IDENTIFIER GenericParams? ( TupleFields? ) WhereClause? ;
StructFields → StructField ( , StructField )* ,?
StructField → OuterAttribute* Visibility? IDENTIFIER : Type
TupleFields → TupleField ( , TupleField )* ,?
Структура - это именованный структурный тип, определённый с помощью ключевого слова struct.
Объявление структуры определяет данное имя в пространстве имён типов модуля или блока, где она находится.
Пример элемента struct и его использования:
#![allow(unused)] fn main() { struct Point {x: i32, y: i32} let p = Point {x: 10, y: 11}; let px: i32 = p.x; }
Кортежная структура - это именованный кортежный тип, который также определяется с помощью ключевого слова struct.
Помимо определения типа, она также определяет конструктор с тем же именем в пространстве имён значений.
Конструктор - это функция, которую можно вызвать для создания нового экземпляра структуры.
Например:
#![allow(unused)] fn main() { struct Point(i32, i32); let p = Point(10, 11); let px: i32 = match p { Point(x, _) => x }; }
Единичная структура - это структура без каких-либо полей, определяемая полным отсутствием списка полей. Такая структура неявно определяет константу своего типа с тем же именем. Например:
#![allow(unused)] fn main() { struct Cookie; let c = [Cookie, Cookie {}, Cookie, Cookie {}]; }
эквивалентно
#![allow(unused)] fn main() { struct Cookie {} const Cookie: Cookie = Cookie {}; let c = [Cookie, Cookie {}, Cookie, Cookie {}]; }
Точное расположение структуры в памяти не специфицировано. Можно указать
конкретное расположение с помощью атрибута repr.