如果我有一个结构体Bar
,它包含对X
的引用,我可以在Bar
上实现一个方法fun
,它返回另一个包含相同引用的结构体Foo
:
struct X{}
trait TraitFoo{}
struct FooImpl<'a> {
pub reference: &'a X
}
impl<'a> TraitFoo for FooImpl<'a> {}
struct Bar<'a> {
pub reference: &'a X
}
impl<'a> Bar<'a> {
fn fun(&self) -> Box<FooImpl> {
Box::new(FooImpl{ reference: self.reference })
}
}
但是,当我尝试将fun
改为返回trait时,如下所示:
impl<'a> Bar<'a> {
fn fun(&self) -> Box<dyn TraitFoo> {
Box::new(FooImpl{ reference: self.reference })
}
}
我得到一个编译错误:
error: lifetime may not live long enough
--> src/main.rs:14:9
|
12 | impl<'a> Bar<'a> {
| -- lifetime `'a` defined here
13 | fn fun(&self) -> Box<dyn TraitFoo> {
14 | Box::new(FooImpl{ reference: self.reference })
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ returning this value requires that `'a` must outlive `'static`
为什么不允许这样做?有没有其他方法可以达到这种效果?
1条答案
按热度按时间cwdobuhd1#
你需要告诉Rust盒子中的值的生命周期与
Bar
中的生命周期绑定:playground