Rust 寿命不';只有当结构中有一个特征对象时,它才能生存

Rust 寿命不';只有当结构中有一个特征对象时,它才能生存,rust,lifetime,Rust,Lifetime,代码: 性状我的性状{ fn更新(&self,_prev:&self){未实现!()} } 性状肌肉疗法性状{ //当v1被注释掉时,代码工作 v1:&'a dyn MyOtherTrait{} 结构容器; impl容器{ //由PROC宏生成:无法更改 fn带_ref` 找到引用“%MyTraitDynWrapper”` 找到引用“&MyTraitDynWrapper&”dyn TraitSo TLDR一旦我基本上拥有了dyn traits,是的。说dyn Trait;底层类型可以很好地实现

代码:


性状我的性状{
fn更新(&self,_prev:&self){未实现!()}
}
性状肌肉疗法性状{
//当v1被注释掉时,代码工作
v1:&'a dyn MyOtherTrait{}
结构容器;
impl容器{
//由PROC宏生成:无法更改
fn带_ref`
找到引用“%MyTraitDynWrapper”`

找到引用“&MyTraitDynWrapper
&”dyn TraitSo TLDR一旦我基本上拥有了
dyn traits,是的。说
dyn Trait
;底层类型可以很好地实现其他类型,就像它可以实现
Debug
Copy
,等等一样。但是你不能通过
dyn Trait>使用它们
error[E0308]: mismatched types
  --> src/lib.rs:33:23
   |
33 |             MyTrait::update(a, b)
   |                                ^ lifetime mismatch
   |
   = note: expected reference `&MyTraitDynWrapper<'_>`
              found reference `&MyTraitDynWrapper<'_>`
note: the anonymous lifetime #2 defined on the body at 32:14...
  --> src/lib.rs:32:14
   |
32 |           b.with_ref(|b| {
   |  ____________________^
33 | |             MyTrait::update(a, b)
34 | |         })
   | |_________^
note: ...does not necessarily outlive the anonymous lifetime #2 defined on the body at 31:13
  --> src/lib.rs:31:13
   |
31 |       a.with_ref(|a| {
   |  ________________^
32 | |         b.with_ref(|b| {
33 | |             MyTrait::update(a, b)
34 | |         })
35 | |     });
   | |_____^

error[E0308]: mismatched types
  --> src/lib.rs:33:23
   |
33 |             MyTrait::update(a, b)
   |                                ^ lifetime mismatch
   |
   = note: expected reference `&MyTraitDynWrapper<'_>`
              found reference `&MyTraitDynWrapper<'_>`
note: the anonymous lifetime #2 defined on the body at 31:13...
  --> src/lib.rs:31:13
   |
31 |       a.with_ref(|a| {
   |  ________________^
32 | |         b.with_ref(|b| {
33 | |             MyTrait::update(a, b)
34 | |         })
35 | |     });
   | |_____^
note: ...does not necessarily outlive the anonymous lifetime #2 defined on the body at 32:14
  --> src/lib.rs:32:14
   |
32 |           b.with_ref(|b| {
   |  ____________________^
33 | |             MyTrait::update(a, b)
34 | |         })
   | |_________^

error: aborting due to 2 previous errors
pub struct MyTraitDynWrapper<'a> {
    v1: &'a dyn for<'b> MyOtherTrait<'b>,
    v2: &'a (),
}
pub struct MyTraitDynWrapper<'a, 'b> {
    v1: &'a dyn MyOtherTrait<'b>,
    v2: &'a (),
}

// ...

impl Container {
    // GENERATED BY PROC MACRO: CANNOT CHANGE
    fn with_ref<'outer_borrow, 'that, ReturnType>(
        &'outer_borrow self,
        user: impl for<'this> FnOnce(&'outer_borrow MyTraitDynWrapper<'this, 'that>) -> ReturnType,
    ) -> ReturnType {
        unimplemented!()
    }
}