Rust---复合数据类型之枚举、数组

发布于:2024-04-05 ⋅ 阅读:(176) ⋅ 点赞:(0)

  • 枚举(Enum):表示一个类型可以有多个不同的取值。枚举类型可以包含不同的变体(variants),每个变体可以有不同的数据类型。

枚举的使用

enum Direction {
    Up,
    Down,
    Left,
    Right,
}

fn move_player(direction: Direction) {
    match direction {
        Direction::Up => println!("Moving up"),
        Direction::Down => println!("Moving down"),
        Direction::Left => println!("Moving left"),
        Direction::Right => println!("Moving right"),
    }
}

fn main() {
    let player_direction = Direction::Up;
    move_player(player_direction);
}

Option 枚举

  • OptionRust 标准库中的一个枚举,用于表示一个值可能存在,也可能不存在的情况。它有两个变体:Some(T) 表示值存在且包含具体的值 TNone 表示值不存在。
  • 如果使用 None 而不是 Some,需要告诉 Rust Option<T> 是什么类型的,因为编译器只通过 None 值无法推断出 Some 成员保存的值的类型。
  • 在对 Option<T> 进行 T 的运算之前必须将其转换为 T
  • Rust 的类型系统通过强制使用 Option<T> 来明确标识可能为空的值,帮助开发者更容易地避免空指针异常和空值错误,因此,只要一个值不是 Option<T> 类型,你就可以安全的认定它的值不为空。
fn divide(x: f64, y: f64) -> Option<f64> {
    if y == 0.0 {
        None
    } else {
        Some(x / y)
    }
}

fn main() {
    let result = divide(10.0, 2.0);

    match result {
        Some(value) => println!("Result: {}", value),
        None => println!("Cannot divide by zero!"),
    }
}

数组的使用

fn main() {
  // 编译器自动推导出one的类型
  let one             = [1, 2, 3];
  // 显式类型标注
  let two: [u8; 3]    = [1, 2, 3];
  let blank1          = [0; 3];
  let blank2: [u8; 3] = [0; 3];

  // arrays是一个二维数组,其中每一个元素都是一个数组,元素类型是[u8; 3]
  let arrays: [[u8; 3]; 4]  = [one, two, blank1, blank2];

  // 借用arrays的元素用作循环中
  for a in &arrays {
    print!("{:?}: ", a);
    // 将a变成一个迭代器,用于循环
    // 你也可以直接用for n in a {}来进行循环
    for n in a.iter() {
      print!("\t{} + 10 = {}", n, n+10);
    }

    let mut sum = 0;
    // 0..a.len,是一个 Rust 的语法糖,其实就等于一个数组,元素是从0,1,2一直增加到到a.len-1
    for i in 0..a.len() {
      sum += a[i];
    }
    println!("\t({:?} = {})", a, sum);
  }
}

输出结果

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到