我正在尝试为 Rust 中的特征创建一个默认实现,以及仅适用于某些类型的默认实现。
假设我这里有这个 rust 代码:
trait Foo {
fn function();
}
impl<T> Foo for T {
fn function() {
println!("any type")
}
}
impl<T: From<f32>> Foo for T {
fn function() {
println!("only f32 related types")
}
}
这会导致实施上的冲突。有办法解决这个问题吗?
由于 any type 的默认实现不使用特定于该类型的任何内容,因此您可以直接在特征中定义默认实现。
这样做,您可以为自己的类型实现此特征,而无需重新定义相同的函数。
但是,对于其他类型(来自其他板条箱)来说这是不可能的,因为没有任何东西可以保证这样的类型不会在未来版本中实现
From<f32>
。
如果发生这种情况,两个实现将会发生冲突。
trait Foo {
fn function(&self) {
println!("any type")
}
}
impl<T: From<f32>> Foo for T {
fn function(&self) {
println!("only f32 related types")
}
}
struct MyType(i32);
impl Foo for MyType {}
fn main() {
let i = 12.34_f32;
i.function();
let m = MyType(123);
m.function();
}
/*
only f32 related types
any type
*/