【发布时间】:2022-07-16 02:02:04
【问题描述】:
在 Rust 文档中,我们看到了这个例子:
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
解释如下:
函数签名现在告诉 Rust 在某个生命周期 'a 中, 函数有两个参数,这两个参数都是字符串切片 至少活得和一生一样长'a。函数签名也 告诉 Rust 从函数返回的字符串切片将存在 至少只要有生之年'a。在实践中,这意味着 最长函数返回的引用的生命周期相同 作为传入的引用的生命周期中较小的一个
注意in practice 后面的词。它提到:
在实践中,这意味着 最长函数返回的引用的生命周期相同 作为传入引用的生命周期中较小的一个
我不明白为什么在实践中,这意味着返回的生命周期与这两个参数的生命周期中较小的一个相同。这是我需要记住的东西还是什么?我们可以清楚地说参数和返回值都有'a相同的说明符。为什么 Rust 认为这意味着返回的值应该具有 smaller 这两个传递的生命周期?
【问题讨论】:
-
这看起来与your question from yesterday非常相似
-
@canton7 由
x和y的范围定义 - 也许更准确地说:在x的范围内和y从调用堆栈中的某处借用。 -
我想知道,在我的示例中,为什么 rust 不能想出一种将其集成到省略规则中的方法?就一个例子而言,这将是什么相反的论点?
-
@Jmb 不。所以我又问了一遍
标签: rust