假设有一个 trait,它的方法都只接受 的引用self,比如
trait Trait {
fn foo(&self) -> i32;
}
Run Code Online (Sandbox Code Playgroud)
我想有这样的特点实施了两个Option<T>和Option<&T>(因为我总是无法承受所有权),用一个简单的实现,如
impl<T: Trait> Trait for Option<T> {
fn foo(&self) -> i32 {
if let Some(inner) = self { return inner.foo(); }
0
}
}
impl<T: Trait> Trait for Option<&T> {
fn foo(&self) -> i32 {
if let Some(inner) = self { return inner.foo(); }
0
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这样做会产生以下错误:
error[E0119]: conflicting implementations of trait `Trait` for type `std::option::Option<&_>`:
--> option.rs:12:1
|
5 | impl<T: …Run Code Online (Sandbox Code Playgroud) rust ×1