我有以下代码:
struct MyStruct<'a>{
data: &'a str,
}
fn get<'a>(S: &'a MyStruct<'a>) -> &'a str{
S.data
}
fn set<'a>(S: &'a mut MyStruct<'a>, x: &'a str){
S.data = x;
}
fn main(){
let mut S = MyStruct{data: "hello"};
let foo: &str = get(&S);
set(&mut S, "goodbye");
dbg!(foo);
}
这无法编译,因为let bar: &str = get(&S)
接受S的不变借入,而在下一行我们接受可变借入.但我们并没有borrow 整个Struct S,只是borrow 了 struct 中的引用.为什么借入仍处于活动状态?
我认为这与Get和Set中的生存期注释有关.这些函数是我试图"描述"相应的成员函数的外观.如果我将get
的签名更改为fn get<'a, 'b>(S: &'a MyStruct<'b>) -> &'b str
,代码就会编译.为什么签名会影响借阅的期限?