如何在通用参数的具体类型上进行匹配?

时间:2019-05-12 15:12:04

标签: types rust match

我有一个带有类型参数U的函数,该函数返回一个Option<U>U受特征num::Num约束。因此,U可以是usizeu8u16u32u64u128,{{1 }}等

如何匹配isize?例如,

U

1 个答案:

答案 0 :(得分:2)

我认为要与类型匹配的原因是因为您希望在编译时而不是运行时进行 switching 。不幸的是,Rust还没有进行这种检查(但是?),但是您可以为此创建一个特征,然后就可以为想要使用的类型实现该特征:

trait DoSomething {
    fn do_something(&self) -> Option<Self>
    where
        Self: Sized;
}

impl DoSomething for u8 {
    fn do_something(&self) -> Option<u8> {
        Some(8)
    }
}

impl DoSomething for u16 {
    fn do_something(&self) -> Option<u16> {
        Some(16)
    }
}

fn f<U>(x: U) -> Option<U>
where
    U: DoSomething,
{
    x.do_something()
}

fn main() {
    println!("{:?}", f(12u8));
    println!("{:?}", f(12u16));
}