请考虑以下程序。特殊之处在于,foo
和foo_mut
的签名要求在生命周期self
内借用'a
,这也是T<'a>
在类型{函数test1<'a>
和test2<'a>
。
test2
可以正常编译,但是test1
无法编译。为什么?它们是否具有相同的生命周期语义?我希望这两个功能都将被拒绝,因为t.foo()
和t.foo_mut()
都应该借用t
换来'a
,因此直到test1
和{{1 }}。
test2
struct T<'a>(&'a u32);
impl<'a> T<'a> {
fn foo(&'a self) {}
fn foo_mut(&'a mut self) {}
fn bar_mut(&mut self) {}
}
fn test1<'a>(mut t: T<'a>) {
t.foo_mut();
// The following call is rejected because `t` is still borrowed.
t.bar_mut();
}
fn test2<'a>(mut t: T<'a>) {
t.foo();
// The following call is allowed; it seems that `t` is not borrowed.
t.bar_mut();
}
fn main() {}