Skip to content

枚举

286字小于1分钟

2022-06-03

枚举(enum 或 enumeration)允许你通过列举可能的成员来定义一个枚举类型。

enum PokerSuit {
  Clubs,
  Spades,
  Diamonds,
  Hearts,
}

枚举类型是一个类型,它会包含所有可能的枚举成员, 而枚举值是该类型中的具体某个成员的实例。

枚举成员实例

通过 :: 操作符访问具体成员

let clubs = PokerSuit::Clubs;

枚举值

声明枚举值类型

enum PokerSuit {
	Clubs(u8),
  Spades(u8),
  Diamonds(u8),
  Hearts(u8),
}

let clubs_8 = PokerSuit::Clubs(8);

任何类型的数据都可以放入枚举成员中 : 例如字符串、数值、结构体甚至另一个枚举。

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

fn main() {
    let m1 = Message::Quit;
    let m2 = Message::Move{x:1,y:1};
    let m3 = Message::ChangeColor(255,255,0);
}

枚举泛型

泛型参数 T ,声明该枚举成员类型为 TT 可以是任意类型

enum AnyWay<T> {
	Any(T),
	Nothing,
}

fn main() {
	let any: AnyWay<i32> = AnyWay::Any(8);
}

Option 枚举

enum Option<T> {
	Some(T), // 表示含有值
	None, // 表示没有值
}

可用于处理 没有有效值 的场景。