铁锈类型铸造选项

Type Casting Option in 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,
    };
}

只需 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)
}

Playground

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

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

Playground

顺便说一句,因为这是一个包装器,所以您可以在任何需要去的地方使用 _.map(Into::into) 而不是 Option<T> => Option<i32>