Rust 为什么多个可变引用使得无法分配结构';谁是自己的成员?
我想借的地方借不到。我将问题归结为以下情况:Rust 为什么多个可变引用使得无法分配结构';谁是自己的成员?,rust,borrow-checker,Rust,Borrow Checker,我想借的地方借不到。我将问题归结为以下情况: struct A){ a、 借用;借用; } 错误[E0623]:生存期不匹配 -->src/lib.rs:6:16 | 5 | fn什么都不做(a:&b mut a(a:&b mut&b mut T T){ *a=*a; } 你得看看你的一生'b和'c: &'b mut…表示您有一个在“时间”内有效的引用 A在A&b之后,'c必须比'b更长寿,也就是说,只要'b有效,'c也有效。但关键的是,不是相反 如您所示,编译器要求'b和'c具有相同的生存
struct A){
a、 借用;借用;
}
错误[E0623]:生存期不匹配
-->src/lib.rs:6:16
|
5 | fn什么都不做(a:&b mut a(a:&b mut&b mut T T){
*a=*a;
}
你得看看你的一生'b
和'c
:
&'b mut…
表示您有一个在“时间”内有效的引用
A
在A&b
之后,'c
必须比'b
更长寿,也就是说,只要'b
有效,'c
也有效。但关键的是,不是相反
如您所示,编译器要求'b
和'c
具有相同的生存期。
为什么会这样
让我们看看我们的可能性:
'c
和'b
没有任何关系:很容易看出,如果没有任何关系,编译器就不能保证A.brook
中的内容,因此也不允许这样做
'c
严格地超过'b
,即,某些地方'c
有效'b
无效:
a.borrow=a.borrow
使用'b
生存期成为a
的重传。但是,这意味着a
现在依赖于'b
生存期,在a
有效的某些时间内无效a
具有'c
的生存期。这会产生错误
'b
严格地超过'c
:如果我们有这种关系,它可能会起作用。重新箭头将是有效的,因为我们得到了比我们要求的('c
)更大的生存期('b
)但是,我们已经有了编译器在幕后推断出的'c:'b
。因此,添加此生存期意味着两个生存期相等,然后我们回到了开始的位置:
struct A你必须看看你的一生'b
和'c
:
&'b mut…
表示您有一个在“时间”内有效的引用
A
在A&b
之后,'c
必须比'b
更长寿,也就是说,只要'b
有效,'c
也有效。但关键的是,不是相反
如您所示,编译器要求'b
和'c
具有相同的生存期。
为什么会这样
让我们看看我们的可能性:
'c
和'b
没有任何关系:很容易看出,如果没有任何关系,编译器就不能保证A.brook
中的内容,因此也不允许这样做
'c
严格地超过'b
,即,某些地方'c
有效'b
无效:
a.borrow=a.borrow
使用'b
生存期成为a
的重传。但是,这意味着a
现在依赖于'b
生存期,在a
有效的某些时间内无效a
具有'c
的生存期。这会产生错误
'b
严格地超过'c
:如果我们有这种关系,它可能会起作用。重新箭头将是有效的,因为我们得到了比我们要求的('c
)更大的生存期('b
)但是,我们已经有了编译器在幕后推断出的'c:'b
。因此,添加此生存期意味着两个生存期相等,然后我们回到了开始的位置:
struct AI不确定它是否回答了我的问题。我在答案中看到的最好的理由是你需要重新借用切片。这并不能解释为什么重新借用仅限于外部借用的生命周期。我想要一点更深入的解释。我不确定它是否回答了我的问题。我在答案中看到的最好的理由是你需要重新借用切片。这并不能解释为什么重新借用仅限于外部借用的生命周期。我需要一点更深入的解释。你对'b:'c
的解释与@TheThirdOne相反。你是对的,完全相反。我找不到一种直观的方法来记住顺序。很好我已经更正了答案。这个答案仍然有误导性。原因是“固定的”什么都不做
是因为编译器确实假设'c:'b
,因此当您添加'b:'c
时,它得出结论是'b='c
。因此这与的作用相同_nothing@trentcl为什么编译器会假定'c:'b
?你可能有解释这一点的来源吗?它是well表单的一部分你对&'b的解释与@thirdone相反。你是对的,正好相反。我找不到一个直观的方法来记住顺序。很好。我已经更正了答案。这个答案仍然有误导性。原因是“固定的”什么都不做
是因为编译器确实假设'c:'b
,因此当您添加'b:'c
时,它得出结论是'b='c
。因此这与的作用相同_nothing@trentcl为什么编译器会假定'c:'b
?你可能有解释这一点的来源吗?它是well表单的一部分&'b mut A的安全性要求