Rust 声明周期简介
{
let r;
{
let x = 5;
r = &x;
}
println!("r: {}", r);
}
这段代码是不会通过 Rust 编译器的,原因是 r 在使用之前就被释放了。
如上,’a 表示 r 的生命周期,’b 表示 x 的生命周期,引用必须在生命周期内才有效。
fn longer(s1: &str, s2: &str) -> &str {
if s2.len() > s1.len() {
s2
} else {
s1
}
}
如上,声明了一个比较字符串长度大小的函数。根据 rust 的所有权原则,下面的代码在编译期会报错:
fn main() {
let r;
{
let s1 = "rust";
let s2 = "ecmascript";
r = longer(s1, s2);
}
println!("{} is longer", r);
}
所以此时需要根据生命周期注释来改造上述方法。
fn longer<'a>(s1: &'a str, s2: &'a str) -> &'a str {
if s2.len() > s1.len() {
s2
} else {
s1
}
}