我的目标是创建一个自定义的展开选项函数,该函数可用于实现默认特征的任何类型,并且在该类型没有数据(无)的情况下,它将返回该类型的默认值。这是我的尝试:
fn unwrap_option(data: Option<T>) -> T
where T: Default
{
if(data.is_none()){
return T::default();
}
else{
return string.unwrap();
}
}
但是它不起作用。
您快到了!
/// Notice you were missing a generic parameter
fn unwrap_option /*->*/ <T> /*<-*/ (data: Option<T>) -> T
where T: Default
{
if let Some(data) = data {
data
} else {
T::default()
}
}
这将尝试使用if let
语句获取值,然后返回默认值(如果为None
)。编写此内容的另一种方法如下:
fn unwrap_option<T: Default>(x: Option<T>) -> T {
match x { // Have we got data?
Some(x) => x, // We do? Return it then
None => T::default(),// We don't? Get default then
}
}
但是,如注释中所述,使用Option::unwrap_or_default
可能是一个更好的主意。