当我想在整数和浮点数上调用min时,我该怎么办?例如,考虑一下:
fn foo<T>(v1: T, v2: T)
where ???
{
....
let new_min = min(v1, v2);
....
}
问题是min不适用于f32
。浮标有another min。
我该如何解决这个问题?
答案 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
......