我希望有一个针对 f32
, u32
和 i32
的 min()
方法,因此我创建了一个名为 Min
的 trait:
trait Min {
fn min(v1: Self, v2: Self) -> Self;
}
impl<T> Min for T where T: Ord {
fn min(v1: Self, v2: Self) -> Self {
::std::cmp::min(v1, v2)
}
}
impl Min for f32 {
fn min(v1: Self, v2: Self) -> Self {
v1.min(v2)
}
}
I get an error:
error[E0119]: conflicting implementations of trait `Min` for type `f32`:
--> src/main.rs:11:1
|
5 | / impl<T> Min for T where T: Ord {
6 | | fn min(v1: Self, v2: Self) -> Self {
7 | | ::std::cmp::min(v1, v2)
8 | | }
9 | | }
| |_- first implementation here
10 |
11 | / impl Min for f32 {
12 | | fn min(v1: Self, v2: Self) -> Self {
13 | | v1.min(v2)
14 | | }
15 | | }
| |_^ conflicting implementation for `f32`
根据 Rust 标准库文档,
f32
没有实现 Ord
接口。为什么会出现冲突的实现呢?
f32
只实现了PartialOrd
。 - Laurence