#unwrap #error #goto #break #return #options #cotinue

unwrap_goto

将 Option 或 Result 解包,或按需跳转到 return/cotinue/break

3 个版本

0.1.2 2022年8月9日
0.1.1 2022年8月9日
0.1.0 2022年7月29日

#4 in #goto

MIT/Apache

8KB
208

unwrap_goto

解包 Option 或 Result 数据。当数据被 Some 或 Ok 包装时,它会解包,否则可以按需跳转到 return/cotinue/break

当没有值返回时。

#[macro_use]
extern crate unwrap_goto;
fn do_none_is_return(m: &Vec<Option<i32>>) {
    let mut k = 0;
    for v in m {
        println!("imcome:{:?}", v);
        k = some_or_return!(v);
        println!("wrap value:{:?}", k);
    }
    assert_eq!(k, 1);
    0
}

fn none_is_return() {
    let m = vec![Some(1), None, Some(1)];
    let n = do_none_is_return(&m);
    println!("return value:{:?}", n);
} 

fn do_none_is_return(m: &Vec<Option<i32>>) -> i64 {
    let mut k = 0;
    for v in m {
        println!("imcome:{:?}", v);
        k = some_or_return!(v, 8);
        println!("wrap value:{:?}", k);
    }
    assert_eq!(k, 1);
    0
}

fn none_is_return() {
    let m = vec![Some(1), None, Some(1)];
    let n = do_none_is_return(&m);
    println!("return value:{:?}", n);
} 

use log::error;

fn call_when_err_return_log() {
    let x: Result<i32, &str> = Err("Some error message");
    ok_or_return!(x, (), error!("log error info.{:?}", x));
    println!("anything print out");
}

无运行时依赖