根据The Rust Programming Language:
由于作用域总是嵌套的,所以另一种说法是,通用生命周期
'a
将获得等于x
和y
生命周期 中较小者的具体生命周期 .
fn main() {
let x = "abcd";
let result;
{
let y = "qwerty";
result = longest(x, y);
}
println!("The longest string is {} ", result);
}
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
在主函数中,"x和y的生命周期 中较小者"是嵌套范围.这也应该是result
中值的生存期,但结果包含该嵌套范围之外的正确值.
为什么这段代码工作正常?