Ordering::Less,Ordering::Equal和Ordering::Greater,这个特殊的枚举是标准库的一部分,rust代码可以导入它。
use std::cmp::Ordering::*;//一次性导入Ordering所有枚举元素
导入之后可以直接用Less,Equal,Greater,不用再加Ordering::
在内存中,C语言风格的枚举以整型存储,偶尔给枚举指定整型值比较有用,比如:
enum HttpStatus {
Ok = 200,
NotModified = 304,
NotFound = 404,
...
}
如果不手动指定,rust会自动分配,从0开始。
默认情况下,rust会以足以容纳所有枚举值的最短位数的的整型类型来分配空间。大多数情况下只有一个字节。
assert_eq!(size_of::<Ordering>(), 1);
assert_eq!(size_of::<HttpStatus>(), 2);
你可以用#[repr]覆盖rust对枚举的内存表示。
转换C语言风格的枚举成为整型是允许的,比如HttpStatus::Ok as i32,反过来把整型转换成枚举是不允许的。因为不是所有整型都有对应的枚举值。不过你可以写自己的转换函数,返回一个Option类型,遇到匹配失败的整数返回None。
一个包enum_primitive包含一个宏有类似的代码。
和结构体类似,可以给枚举添加注解#[derive(PartialEq)]以实现==操作符。
枚举也可以有方法,和结构体语法一样。
