&i32 // 引用
&'a i32 // 带有显式生命周期的引用
&'a mut i32 // 带有显式生命周期的可变引用
泛型生命周期参数需 要声明在函数名和参数列表间的尖括号中。这里我们想要告诉 Rust 关于参数中的引用和返回 值之间的限制是他们都必须拥有相同的生命周期
正确的
fn main() {
let string1 = String::from("long string is long");
{
let string2 = String::from("xyz");
let result = longest(string1.as_str(), string2.as_str());
println!("The longest string is {}", result);
}
}
- string1 直到外部作用域结束都是有效的
- string2 则在内部作用域中是有 效的
- result 则引用了一些直到内部作用域结束都是有效的值
错误的
fn main() {
let string1 = String::from("long string is long");
let result;
{
let string2 = String::from("xyz");
result = longest(string1.as_str(), string2.as_str()); }
println!("The longest string is {}", result);
}
}
- longest函数返回的引用的生命周期与传入参数的生命周期中较短那个保持一致
- 即与string2保持一致, 这样result和string2的生命周期不一致
网友评论