从getter返回时,为什么mut和non mut引用字段具有不同的生存期?

时间:2019-02-08 06:22:40

标签: rust lifetime

下面的代码示例似乎显示background和非mut参考字段的生存期是不同的。那是故意的吗?

此代码成功编译。

mut

但是,将struct Foo<'a> { data: &'a u32, } impl<'a> Foo<'a> { fn foo(&self) -> &'a u32 { self.data } } 添加到mut字段后,由于存在生命周期问题,该操作失败。

data
struct Foo<'a> {
    data: &'a mut u32,
}

impl<'a> Foo<'a> {
    fn foo(&self) -> &'a u32 {
        self.data
    }
}

为什么非可变版本的error[E0312]: lifetime of reference outlives lifetime of borrowed content... --> src/main.rs:10:9 | 10 | self.data | ^^^^^^^^^ | note: ...the reference is valid for the lifetime 'a as defined on the impl at 8:6... --> src/main.rs:8:6 | 8 | impl<'a> Foo<'a> { | ^^ note: ...but the borrowed content is only valid for the anonymous lifetime #1 defined on the method body at 9:5 --> src/main.rs:9:5 | 9 | / fn foo(&self) -> &'a u32 { 10 | | self.data 11 | | } | |_____^ 也没有生存期self.data

(顺便说一句,将anonymous lifetime #1更改为fn foo(&self)将会编译,但是为什么非fn foo(&'a self)版本会在没有此更改的情况下进行编译?)

0 个答案:

没有答案