如果函数在可选函数中返回一个值,我不想采取行动;我如何只测试None的情况?这段代码可以工作,但是看起来很糟糕。
None
let v = ffunc(); match v { None => { callproc() }, Some(x) => { } }
在C语言中,我可以写:
int x = ffunc(); if ( !x ) { callproc() }
2cmtqfgy1#
要检查Option是否为None,可以使用Option::is_none或if let语法。例如:
Option
Option::is_none
if 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") }
bpsygsoo2#
如果您对该值不感兴趣,只需使用Option::is_none()或其对应项Option::is_some():
Option::is_none()
Option::is_some()
if v.is_none() { ... }
lnlaulya3#
要完成以上回答,如果选项为Some(x):
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() {...}
zzlelutf4#
如果你想在Option中插入一个值,如果它是None,那么你可以使用get_or_insert
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用于延迟求值:
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));
您也可以使用or和or_else返回一个新的Option,而不是改变原始的:
or
or_else
let x = None; assert_eq!(x.or(Some(100)), Some(100)); let x = None; assert_eq!(x.or_else(|| Some(100)), Some(100));
4条答案
按热度按时间2cmtqfgy1#
要检查
Option
是否为None
,可以使用Option::is_none
或if let
语法。例如:
或者使用
Option::is_none
函数:bpsygsoo2#
如果您对该值不感兴趣,只需使用
Option::is_none()
或其对应项Option::is_some()
:lnlaulya3#
要完成以上回答,如果选项为
Some(x)
:如果你不关心期权的价值,那么:
或
zzlelutf4#
如果你想在
Option
中插入一个值,如果它是None
,那么你可以使用get_or_insert
或者
get_or_insert_with
用于延迟求值:您也可以使用
or
和or_else
返回一个新的Option
,而不是改变原始的: