为什么可变借款超出了它的范围?

2021-02-18 21:51

在我期望可变借阅结束之后,我遇到了一个关于同时使用可变借阅和不可变借阅的混淆错误。我对类似的问题(1,2,3,4)做了很多研究,这让我相信我的问题与词汇生

解答动态

  • 31

    • let mut child=Chain::child{父:mut root};

      • ----------此处发生可变借用…36

        • 断言

          • eq!(quot;.to_string()*根目录。获取());

            • ^ ^ ^ ^ ^ ^

                        • 不可变借用发生在此处

                          • 可变借用稍后在此处使用1我理解为什么不可变借用发生在此处,但我不理解这里使用可变借阅。怎么能在同一个地方同时使用呢?我希望有人能解释发生了什么,以及我如何避免它。谢谢。

                            • 简而言之,lt;aamp;Tgt;,编译器可以在需要时缩短'a的生存期,以匹配其他生存期或作为NLL的一部分(情况并非总是如此,这取决于T是什么)。但是,对于可变引用,它不能这样做lt;aamp;a mut Tgt;,引用的生存期在概念上进行了扩展,以匹配参数的生存期。这基本上意味着您已经创建了一个永远不会被释放的可变借用。
                              基本上,只有当嵌套值在其生命周期内是协变的时,才有可能创建基于引用的层次结构。哪个排除:
                              mutable referencestrait对象具有内部可变性的结构 参考操场上的这些变化,以了解这些变化是如何不像预期的那样工作的。
                              参见还有:为什么链接生命周期只与可变引用有关?如何使用特征对象链实现责任链模式?从具有自链接生存期的可变引用中获取不可变引用有什么区别?

                              • 问题不在于词法生命周期,添加显式drop不会改变错误。问题在于lt;alt;Chainlt;RefCell>”

                                • End

                                免责声明:

                                本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。