铁锈类型铸造选项

dev*_*omp 3 casting rust

如何在 Rust 中转换可选值?

这是我想出的方法,它确实有效,但我认为必须有一种更优雅的方法。

pub fn option_t_to_i32_option<T1, T2>(optional_val: Option<T1>) -> Option<T2>
where
    T2: From<T1>,
{
    return match optional_val {
        Some(val) => Some(T2::from(val)),
        None => None,
    };
}

Run Code Online (Sandbox Code Playgroud)

Net*_*ave 5

只是map Into::into为了你的限制:

pub fn option_t_to_i32_option<T1, T2>(optional_val: Option<T1>) -> Option<T2>
where
    T2: From<T1>,
{
    optional_val.map(Into::into)
}
Run Code Online (Sandbox Code Playgroud)

操场

根据您的函数名称,也许您希望将输出类型实际匹配到i32

pub fn option_t_to_i32_option<T1>(optional_val: Option<T1>) -> Option<i32>
where
    T1: Into<i32>,
{
    optional_val.map(Into::into)
}
Run Code Online (Sandbox Code Playgroud)

操场

顺便说一句,由于这是一个包装器,因此您可以在_.map(Into::into)需要的地方使用Option<T> => Option<i32>