我的特征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中的示例代码。