前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2023学习日志

2023学习日志

原创
作者头像
TomoriNao
修改2023-07-03 21:42:06
1420
修改2023-07-03 21:42:06
举报
文章被收录于专栏:每月技术成长

rust

枚举类型

枚举的声明类似于结构体,不同的是,在一个枚举类型的变量中,其值类型为所有字段类型之一。结构体中可以嵌套枚举类型,实现复杂的数据结构。

枚举的定义及使用如下:

代码语言:rust
复制
    enum IpAddr {
        V4(u8,u8,u8,u8),
        V6(String),
    }
    let home = IpAddr::V4(17,0,0,1);
    let loopback = IpAddr::V6(String::from("::1"));

方法

类似于结构体,也可以为枚举类型实现方法,可以通过枚举类型变量进行调用。

Option 枚举

Option 是rust标准库定义的枚举类型,定义如下:

代码语言:rust
复制
    enum Option<T> {
        None,
        Some(T),
    }

其中T为泛型,标准库如此定义是为了增加代码的兼容性。

Option的使用如下:

代码语言:rust
复制
    let some_number = Some(5);
    let some_char = Some('e');
    let absent_number : Option<i32> = None;

值得注意的是,rust对Option进行了优化,使用rust声明变量时可以省略Option::前缀。但将变量赋值为None时,需要指定其类型。

此外,Option<T>类型与T类型不能直接进行运算,需要提前进行类型转换。如:

Option<i8>不能直接与i8类型的数字进行运算。

match控制流语句

功能类似于其他语言中的swith语句,match能够处理多分支的情况。用法如下:

代码语言:rust
复制
enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter(UsState),
}
enum UsState {
    Albama,
    Alaska,
}
fn value_in_cents(coin: Coin) -> u8 {
    match coin {
        Coin::Penn => {
            println!("hello world!!!");
            1
        },
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter(state) => {
            println!("state is {:?}",state);
            35
        },
    }
}

'->'前为对应的模式,指定值与该模式匹配后将执行相应的表达式代码块,模式中也可以绑定值,如代码19-22行所示。'->'后可跟一个表达式或大括号包围的代码块。值得注意的是,代码块必须有返回值,表达式或代码块的返回值将作为match返回值

此外,match必须覆盖所有可能的模式,可以使用other或者_来表示默认匹配的模式。

可以使用if-let或if-let-else语句

可以用if-let或if-let-else语句来替代分支较少的match

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • rust
    • 枚举类型
      • 方法
      • Option 枚举
    • match控制流语句
      • 可以使用if-let或if-let-else语句
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档