小编cri*_*ayb的帖子

为 Option<T> 和 Option<&T> 实现一个特征

假设有一个 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

0
推荐指数
1
解决办法
831
查看次数

标签 统计

rust ×1