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}}
