3 个版本
0.1.2 | 2022年8月9日 |
---|---|
0.1.1 | 2022年8月9日 |
0.1.0 | 2022年7月29日 |
#4 in #goto
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");
}