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

Mai*_*ein 1 rust

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

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

问题是min不起作用f32.花车还有一分钟.

我该如何解决这个问题?

She*_*ter 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);
}
Run Code Online (Sandbox Code Playgroud)

至于提到的其他地方,浮点比较是很难.

对于应该是什么结果没有回答min(NaN, 0.0),所以由你来决定.如果您认为NaN小于或大于所有其他数字,那太好了!也许它等于零!也许你应该声称永远不会NaN......

  • 由于专业化已经实施 - 不,专业化不能解决冲突的特质问题(如`f32:!Ord`),你还需要[互斥特征](https://github.com/rust-lang/rfcs/拉/ 1148).@MatthieuM. (2认同)