• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Asc.416e74
博客园    首页    新随笔    联系   管理     

Rust 基础(04) 枚举

枚舉

定義

通过 enum 声明关键字,并且在里面定义各个枚举的变体(具体枚举值),而每个枚举值可以绑定数据。比如 周五(Fri 就绑定了一个 String 类型的数据),除了 String 枚举的变体可以绑定任何类型的数据,甚至是结构体和其他的枚举(不能包含自己)。

enum Week {
    Mon,
    Tue,
    Wed,
    Thur,
    Fri(String),
    Sat,
    Sun,
}

使用

使用枚举只需要通过 枚举类型::变体 即可。

let mon:Week = Week::Fri(String::from("吃串串"));

如果你想要获取变体绑定的数据则可以使用 match 进行模式匹配。

两个特殊的枚举类型

Option

Option 枚举包含两个两个变体: Some(T) 和 None。Option, Some, None 属于预导入模块,可以直接使用。Some(T) 表示有一个值,这个值为 T,None表示没有值(可对标其他语言中的 null,null 就表示有一个值,但这个值是没有值,而 Rust 中的 None 只代表没有值,这也就防止了野指针的出现。)。

通过 match 匹配结构体中变体绑定的值:

let x: Option<i32> = Some(100);
match x {
    Some(t)=>println!("{}",t),
    None=> println!("none"),
};

Result

Result 枚举类型包含两个变体:Err(E), Ok(T)。与 Option 相似,Ok 表示值,Err 表示错误。详情我们会在后续的Rust错误处理更详细的讲述。

if-let

if-let 用于处理在match匹配过程中只需要关注其中一种结果的情况(一种语法糖,让代码看起来更简洁),比如下面这段代码。

let x: Option<i32> = Some(90);
// 使用 match
match x {
    Some(mut t) => {
        t *= 20;
        println!("{}", t);
    },
    None => (),
};
// 使用 if-let
if let Some(mut t) = x {
    t *= 20;
    println!("{}",t);
};
posted @ 2022-07-26 00:17  ストッキング  阅读(80)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3