如何在可能是整数或浮点数的泛型类型上调用`min`?

时间:2016-06-26 17:43:49

标签: rust

当我想在整数和浮点数上调用min时,我该怎么办?例如,考虑一下:

fn foo<T>(v1: T, v2: T)
    where ???
{
   ....
   let new_min = min(v1, v2);
   ....
}

问题是min不适用于f32。浮标有another min

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

创建自己的特征,定义各种类型的行为:

trait Min {
    fn min(self, other: Self) -> Self;
}

impl Min for u8 {
    fn min(self, other: u8) -> u8 { ::std::cmp::min(self, other) }
}

impl Min for f32 {
    fn min(self, other: f32) -> f32 { f32::min(self, other) }
}

fn foo<T>(v1: T, v2: T)
    where T: Min
{
   let new_min = Min::min(v1, v2);
}

mentioned中的other places,浮点数比较are hard

min(NaN, 0.0)的结果应该没有一个答案,所以由您来决定。如果您认为NaN小于或大于所有其他数字,那太好了!也许它等于零!也许你应该断言永远不会成为NaN ......