• rust option


    [root@bogon option]# rm -rf target/
    [root@bogon option]# cargo build
       Compiling own v0.1.0 (/data2/rust/option)
        Finished dev [unoptimized + debuginfo] target(s) in 0.47s
    [root@bogon option]# cargo  run
        Finished dev [unoptimized + debuginfo] target(s) in 0.01s
         Running `target/debug/own`
    4 / 2 = 2
    1 / 0 failed!
    Some(0.0) unwraps to 0.0
    thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/main.rs:38:49
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    [root@bogon option]# 

    选项 Option

    有时候想要捕捉到程序某部分的失败信息,而不调用 panic!;这可使用 Option 枚举来完成。

    Option<T> 枚举有两个变量:

    • None,表明失败或缺少值
    • Some(value),元组结构体,使用 T 类型装包了一个值 value
     
    // 不会 `panic!` 的整数除法。
    fn checked_division(dividend: i32, divisor: i32) -> Option<i32> {
        if divisor == 0 {
            // 失败表示成 `None` 变量
            None
        } else {
            // 结果 Result 被装包成 `Some` 变量
            Some(dividend / divisor)
        }
    }
    
    // 此函数处理可能失败的除法
    fn try_division(dividend: i32, divisor: i32) {
        // `Option` 值可以进行模式匹配,就和其他枚举一样
        match checked_division(dividend, divisor) {
            None => println!("{} / {} failed!", dividend, divisor),
            Some(quotient) => {
                println!("{} / {} = {}", dividend, divisor, quotient)
            },
        }
    }
    
    fn main() {
        try_division(4, 2);
        try_division(1, 0);
    
        // 绑定 `None` 到一个变量需要类型标注
        let none: Option<i32> = None;
        let _equivalent_none = None::<i32>;
    
        let optional_float = Some(0f32);
    
        // 解包 `Some` 变量将展开解包后的值。
        // (原文:Unwrapping a `Some` variant will extract the value wrapped.)
        println!("{:?} unwraps to {:?}", optional_float, optional_float.unwrap());
    
        // 解包 `None` 变量将会引发 `panic!`。
        println!("{:?} unwraps to {:?}", none, none.unwrap());
    }
  • 相关阅读:
    Android中手机录屏并转换GIF的两种方式
    Android中访问sdcard路径的几种方式
    Android中开发工具Android Studio修改created用户(windows环境)
    [UOJ211][UER #6]逃跑
    [CF1168D]Anagram Paths
    [CF852H]Bob and stages
    Codechef BINOMSUM
    [ZJOI2019]开关
    [CF1161F]Zigzag Game
    [CF1149E]Election Promises
  • 原文地址:https://www.cnblogs.com/dream397/p/14189288.html
Copyright © 2020-2023  润新知