我有一个带有类型参数U
的函数,该函数返回一个Option<U>
。 U
受特征num::Num
约束。因此,U
可以是usize
,u8
,u16
,u32
,u64
,u128
,{{1 }}等
如何匹配isize
?例如,
U
答案 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));
}