初面网初面网

枚举类

Rust中的枚举类可以包含不同类型的值,甚至是命名的值。

三种枚举

  • 无参枚举
enum Fruit {
  Apple,
  Orange
}
  • 带参枚举
enum Info {
  Age(u8)
}
  • 带值枚举
enum Color {
  Red = 0xff0000,
  Green = 0x00ff00,
  Blue = 0x0000ff,
}

示例

#[derive(Debug)]
enum Book {
  Papery, Electronic
  /*
  可以没有属性描述,也可以添加描述
  Papery(u32),
  Electronic(String),
  */

  /*
    甚至命名
    Papery{index: u32},
  */

}

let book = Book::Papery;
// let book = Book::Papery(1001);
// let book = Book::Papery{index: 1001};
println!("{:?}", book);

match

rust中没有switch,但是可以使用match来达到同样的效果。

enum Book {
  Papery {index: u32},
  Electronic {url: String},
}

let book = Book::Papery{index: 1001};
let ebook = Book::Electronic{url: String::from("url...")};

match book {
  Book::Papery { index } => {
    println!("Papery book {}", index);
  },
  Book::Electronic { url } => {
    println!("E-book {}", url);
  }
}

更简单的例子

let t = "abc";
match t {
  "abc" => println!("yes"),   // 像这样,可以直接写成表达式。但是多个条件时,表达式的返回值类型必须相同
  _ => {},  // 所有处理分支之外的处理,即默认处理
}

Option枚举类

是Rust标准库中的枚举类,填补Rust不支持null引用的空白。

Rust实际上不允许null存在,但是null有时能很方便地解决问题。

enum Option<T>{
  Some(T),
  None,
}

// 定义一个可以为空值的类
let opt = Option::Some("Hello");

// 操作前要先判断是否为 Option::None
match opt{
  Option::Some(something) => {
    println!("{}", something);
  },
  Option::None => {
    println!("opt is nothing");
  }
}

初始值为空的 Option 必须明确类型

let opt: Option<&str> = Option::None;

Option 是 Rust 编译器默认引入的,在使用时可以省略 Option:: 直接写 None 或者 Some()

let t = Some(64);
match t {
  Some(64) => println!("Yes"),
  _ => println!("No"),
}

if let

简短的判断可以用if let完成

// let i = 0;
// match i {
//     0 => println!("zero"),
//     _ => {},
// }

// 使用if let 改写
let i = 0;
if let 0 = i {
    println!("zero");
}

while let

满足模式则一直执行

let mut i = 0;
while let 0 = i{
  i = i + 1;
  println!("{}", i);
}

更新于 2026/6/10