3.5 只借用其中一个
05-只借用其中一个 — Comprehensive Rust
2 分钟阅读
译文 · 基于 Comprehensive Rust
原文链接: https://google.github.io/comprehensive-rust/lifetimes/borrow-one.html
3.5 只借用其中一个
本例中 find_nearest 接受多个借用,但只返回其中一个。生命周期标注显式地把返回的借用与对应的参数借用绑定在一起。
| |
折叠
find_nearest的定义可能有助于把注意力放在函数签名上。函数内的实际逻辑较复杂,对借用分析而言并不重要。调用
find_nearest时,返回的引用并不借用query,因此在nearest仍有效时我们可以丢弃它。但如果返回了错误的借用会怎样?把
find_nearest的最后一行改成返回query。向学员展示编译错误。首先必须给
query加上生命周期标注。向学员展示可以为find_nearest添加第二个生命周期'b。向学员展示新的错误。借用检查器会验证函数体中的逻辑确实返回具有正确生命周期的引用,强制函数遵守签名所设定的契约。
延伸阅读
错误中的「help」信息指出,我们可以添加生命周期约束
'b: 'a,表示'b至少与'a一样长,从而允许返回query。这是生命周期子类型(lifetime subtyping)的例子,允许在期望较短生命周期的地方返回较长生命周期。我们也可以通过返回
'static生命周期做类似的事,例如对static变量的引用。'static保证比任何其他生命周期都长,因此用它替换较短生命周期总是安全的。