如何定义一个函数,该函数接受实现默认特征的任何参数

问题描述 投票:0回答:1

我的目标是创建一个自定义的展开选项函数,该函数可用于实现默认特征的任何类型,并且在该类型没有数据(无)的情况下,它将返回该类型的默认值。这是我的尝试:

fn unwrap_option(data: Option<T>) -> T 

    where T: Default
{

    if(data.is_none()){
        return T::default();
    }
    else{
        return string.unwrap();
    }

}

但是它不起作用。

rust
1个回答
0
投票

您快到了!

/// 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可能是一个更好的主意。

© www.soinside.com 2019 - 2024. All rights reserved.