为什么实现特征A的类型本身实现特征B的类型不能转换为B的特征对象?

时间:2017-12-07 20:56:18

标签: rust traits

我的特征Service定义如下:

trait Service {
    fn do_something(&self);
}

Service由另一个特征FancyService实施:

trait FancyService {
    fn fancy(&self) -> i32;
    fn do_something_fancy(&self, t: i32);
}

impl Service for FancyService {
    fn do_something(&self) {
        let t = self.fancy();

        self.do_something_fancy(t);
    }
}

最后,我有一个struct来实现FancyService

struct MyFancyService {
    t: i32
}

impl FancyService for MyFancyService {
    fn fancy(&self) -> i32 { self.t }
    fn do_something_fancy(&self, t: i32) { println!("t: {}", t); }
}

这个想法是MyFancyService现在也应该实现Service,因此我应该能够将它放在Box<Service>中,如下所示:

let s: Box<Service> = Box::new(MyFancyService { t: 42 });

这不编译。 Rust抱怨MyFancyService

  
   |
28 |     let s: Box<Service> = Box::new(MyFancyService { t: 42 });
   |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Service` is not implemented for `MyFancyService`
   |
   = note: required for the cast to the object type `Service`

鉴于MyFancyService实现FancyService实施Service,为什么MyFancyService不实施Service

playground中的示例代码。

0 个答案:

没有答案