Structs
结构体
commit: b0e0ad6490d6517c19546b1023948986578fc378
本章译文最后维护日期:2020-11-8
句法
Struct :
StructStruct
| TupleStructStructStruct :
struct
IDENTIFIER Generics? WhereClause? ({
StructFields?}
|;
)TupleStruct :
struct
IDENTIFIER Generics?(
TupleFields?)
WhereClause?;
StructFields :
StructField (,
StructField)*,
?StructField :
OuterAttribute*
Visibility?
IDENTIFIER:
TypeTupleFields :
TupleField (,
TupleField)*,
?TupleField :
OuterAttribute*
Visibility?
Type
结构体是一个使用关键字 struct
定义的标称型(nominal)结构体类型。
结构体(struct
)程序项的一个示例和它的使用方法:
struct Point {x: i32, y: i32}
let p = Point {x: 10, y: 11};
let px: i32 = p.x;
元组结构体是一个标称型(nominal)元组类型,也是用关键字 struct
定义的。例如:
struct Point(i32, i32);
let p = Point(10, 11);
let px: i32 = match p { Point(x, _) => x };
单元结构体(unit-like struct)是没有任何字段的结构体,它的定义完全不包含字段(fields)列表。这样的结构体隐式定义了其类型的同名常量(值)。例如:
struct Cookie;
let c = [Cookie, Cookie {}, Cookie, Cookie {}];
等价于
struct Cookie {}
const Cookie: Cookie = Cookie {};
let c = [Cookie, Cookie {}, Cookie, Cookie {}];
结构体的精确内存布局还没有规范下来。目前可以使用 repr
属性来指定特定的布局。