Rust系列(8):枚举类型
  oS1xgoxjr0QZ 2023年11月02日 22 0


枚举类型

枚举类型也叫枚举,它表示的是一种多个类型的“或”的关系。

使用 enum 关键字来声明一个枚举类型,枚举类型的成员称为变体(variant)。

枚举有多种不同的写法,包括:

  • 不带值的枚举
  • 带值的枚举
  • 带参数的枚举

定义枚举类型

比如,定义一个行星类型的枚举,它的成员有两个:MarsEarth

enum Planet {
  Mars,
  Earth,
}

最后一个变体后面的逗号可以省略不写。

带枚举值的枚举

在声明枚举类型时,还可以显式地给成员赋值。上面的 Planet 类型就可以写成:

enum Planet {  
     Mars = 0,  
     Earth = 1,
}

再比如定义一个表示 HTTP 响应状态的枚举类型:

enum State {
    OK = 200,
    NotFound = 404,
    Error = 500,
}

带参数的枚举

在声明枚举类型时,还可以给成员带上参数,这种方式类似于函数的调用。

比如定义一个表示 IP 地址的类型,它有两个成员,分别表示 IPv4 类型的 IP 地址和 IPv6 类型的 IP 地址:

enum IpAddr {
  IPv4(u8, u8, u8, u8),
  IPv6(u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8),
}

这种带参数的枚举是 Rust 和其他语言差别最大的一种枚举。

模式匹配

要使用枚举类型,需要使用模式匹配。模式匹配是 Rust 中很重要的一个知识点,这里先简单使用 match 来获取枚举类型成员的数据:

enum IpAddr {  
    IPv4(u8, u8, u8, u8),  
    IPv6(u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8),
}

fn main() {
  let localhost: IpAddr = IpAddr::IPv4(127, 0, 0, 1);
  match localhost {
    IpAddr::IPv4(a, b, c, d) => {
      println!("{} {} {} {}", a, b, c, d)
    }
    _ => {} // 任何非 IPv4 类型走这条分支
  }
}

小结

本文介绍了 Rust 中的枚举类型, 和结构体类型一样,枚举主要用来创建用户自定义的类型,不同之处是它会包含所有可被列举的值。要使用枚举类型的值,需要配合模式匹配。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  oS1xgoxjr0QZ   2023年11月02日   42   0   0 数组Rust
  oS1xgoxjr0QZ   2023年11月02日   32   0   0 Rust
  dBFTbkVLMBge   2023年11月02日   29   0   0 Rust
  oS1xgoxjr0QZ   2023年11月02日   39   0   0 Rust
  oS1xgoxjr0QZ   2023年11月02日   25   0   0 Rust
  oS1xgoxjr0QZ   2023年11月02日   41   0   0 Rust
  oS1xgoxjr0QZ   2023年11月02日   49   0   0 Rust
oS1xgoxjr0QZ