下面的代码示例似乎显示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)
版本会在没有此更改的情况下进行编译?)