2023学习日志

2023-07-03 21:42:06 浏览数 (1)

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

0 人点赞