首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >铁锈:为什么在结构内部借用引用,借用整个结构?

铁锈:为什么在结构内部借用引用,借用整个结构?
EN

Stack Overflow用户
提问于 2022-11-27 01:34:58
回答 1查看 58关注 0票数 2

我有以下代码:

代码语言:javascript
复制
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,而在下一行中,我们使用可变的借入。但我们并没有借用整个结构S,只是结构内部的参考。为什么借款仍然活跃?

我认为这与get和set中的生存期注释有关。这些函数是我尝试"desugar“的相应成员函数的样子。如果我将get的签名更改为fn get<'a, 'b>(S: &'a MyStruct<'b>) -> &'b str,代码将编译。为什么签名会影响借款的期限?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-27 01:46:01

通过将get()中的生存期指定为fn(&'a MyStruct<'a>) -> &'a str,您可以说您借用了字符串生命周期的整个结构。因为字符串是在set()之后使用的,所以这个时间段包括set()。因此,在set()期间,结构被借用,这是一个错误。

另一方面,如果将其指定为fn(&'b MyStruct<'a>) -> &'a str,则只为get()借用结构,并返回具有不同生存期的字符串。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74586882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档