【发布时间】:2021-07-01 06:53:51
【问题描述】:
我在处理 Rust 生命周期时看到的典型示例是以下 func:
pub fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
有趣的是,这似乎转化为“longest() 结果的生命周期是其输入参数的最短生命周期”。逻辑对我来说很有意义,但我不明白 如何 这是通过语法传达的。
当我查看该函数时,它看起来有一个生命周期 'a 并且该函数似乎强制 x 和 y 必须具有 精确 相同的生命周期 'a因此结果必须具有相同的生命周期'a。
我不确定这种语法是否本质上是我所看到的语法糖。如果我被允许冗长,那么我认为语法看起来像(我知道这不是正确的语法):
pub fn longest<'a, 'b>(x: &'a str, y: &'b str) -> min('a, 'b) str {
if x.len() > y.len() {
x
} else {
y
}
}
我理解正确还是误解了语言?
【问题讨论】:
-
这能回答你的问题吗? Semantics of lifetime parameters
-
我认为一个更好的例子是
fn find<'a, 'b>(pattern: &'a str, text: &'b str) -> &'b str- 这里的生命周期清楚地表明该函数正在返回text的一部分,而不是pattern的一部分。编译器无法猜到这一点,除非通过查看函数体,编译器拒绝这样做以保持函数签名作为合同有意义。