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的安全性要求