枚举可以携带数据,比如:
enum RoughTime {
InThePast(TimeUnit, u32),
JustNow,
InTheFuture(TimeUnit, u32)
}
这些带参数的元素称为元组变量。类似结构体,这些带参数的元素是创建枚举的函数。比如:
let a = RoughTime::InThePast(TimeUnit::Years,2);
枚举还可以有结构体元素,包含有带名字的属性,就像普通结构体一样。比如:
enum Shape {
Sphere {
center: Point3d,
radius: f32
},
Cuboid {
corner1: Point3d,
corner2: Point3d
}
}
let unit_sphere = Shape::Sphere {
center: ORIGIN,
radius: 1.0
};
总之,rust有3种类型的枚举值,无数据类型,元组变量类型和结构体类型。单个枚举里面可以都包含这3种类型的值。
元组的值都是自动为公有的。
在内存中,枚举的数据存储为一个整型标记和一块足够容纳最占内存的枚举元素的空间(每个枚举值占用的空间是相同的,占用空间大小取决于最占内存的那个元素)。整型标记是语言内部用的,用于查找哪个构造器用于创建枚举值。
rust对枚举的内存表示不做任何承诺。
