2.6.2 约束相关的生命周期会相互「感染」
1分钟内可阅读完
译文 · 基于 Learning Rust
约束相关的生命周期会相互「感染」
原文链接: https://quinedot.github.io/rust-learning/m-infect.html
上一节中将 'a 和 'b 分开,在 self 被借用方面并没有让事情更灵活。一旦你声明了像 'a: 'b 这样的约束,两个生命周期就会相互"感染"。尽管返回类型与输入有不同的生命周期,它实际上仍然是对输入的重借用。
这就是为什么对返回值的使用仍然让 *self 保持独占借用:对返回值的使用意味着 'b 必须仍然有效,而由于 'a: 'b,'a 也必须仍然有效。因此原始借用必须仍然生效。
这实际上也可能发生在两个输入参数之间:如果你声明了两个借用之间的生命周期关系,编译器会假设它们在某种程度上可以相互观察。你可能暂时不会遇到这种情况,但如果遇到了,编译器错误往往是 drop 错误(“当 x 被 drop 时,借用可能在此处被使用”),或者有时读起来像"数据从 X 流入 Y"。