考虑书中的以下示例:
fn main() {
let string1 = String::from("abcd");
let string2 = "xyz";
let result = longest(string1.as_str(), string2);
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
}
}
Run Code Online (Sandbox Code Playgroud)
据说(强调我的)
函数签名现在告诉 Rust,在某个生命周期 内
'a,该函数采用两个参数,这两个参数都是至少与生命周期一样长的字符串切片'a。函数签名还告诉 Rust,从函数返回的字符串切片将至少与生命周期一样长'a。实际上,这意味着longest函数返回的引用的生命周期与传入引用的生命周期中较小的一个相同。这些约束是我们希望 Rust 强制执行的。
粗体的句子不应该是函数签名还告诉Rust,从函数返回的字符串切片的寿命最多与lifetime一样长'a。?这样,我们就可以确信,只要 和x都y存在,那么返回值也将有效,因为后者引用前者。
换句话来说,如果x和 …