rust 如何仅在Option为None时有条件地执行代码?

flmtquvp  于 2023-02-08  发布在  其他
关注(0)|答案(4)|浏览(305)

如果函数在可选函数中返回一个值,我不想采取行动;我如何只测试None的情况?这段代码可以工作,但是看起来很糟糕。

let v = ffunc();
match v {
  None => { callproc() }, 
  Some(x) => {  }
}

在C语言中,我可以写:

int x = ffunc();
if ( !x ) { callproc() }
2cmtqfgy

2cmtqfgy1#

要检查Option是否为None,可以使用Option::is_noneif let语法。
例如:

let x = ffunc();

if let None = x {
    println!("x is None")
}

或者使用Option::is_none函数:

let x = ffunc();

if x.is_none() {
    println!("x is None")
}
bpsygsoo

bpsygsoo2#

如果您对该值不感兴趣,只需使用Option::is_none()或其对应项Option::is_some()

if v.is_none() { ... }
lnlaulya

lnlaulya3#

要完成以上回答,如果选项为Some(x)

let v = ffunc()
if let Some(x) = v {
    func_to_use_x(x);
} else {
    callproc();
}

如果你不关心期权的价值,那么:

if v.is_none() {...}

if v.is_some() {...}
zzlelutf

zzlelutf4#

如果你想在Option中插入一个值,如果它是None,那么你可以使用get_or_insert

let mut x = None;
let y = x.get_or_insert(5);

assert_eq!(y, &5);
assert_eq!(x, Some(5));

或者get_or_insert_with用于延迟求值:

let mut x = None;
let y = x.get_or_insert_with(|| 5);

assert_eq!(y, &5);
assert_eq!(x, Some(5));

您也可以使用oror_else返回一个新的Option,而不是改变原始的:

let x = None;
assert_eq!(x.or(Some(100)), Some(100));

let x = None;
assert_eq!(x.or_else(|| Some(100)), Some(100));

相关问题