生命周期

late/early bound

晚限定与早限定

late bound

这也是最普遍的生命周期的理解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct A<T>(T);
fn main() {
let a = A::<i32>(3);
}
// ==============================================================
fn the_longest<'c, 'a: 'c>(s1: &'a str, s2: &'a str) -> &'c str {
if s1.len() > s2.len() { s1 } else { s2}
}
fn main() {

let s1 = String::from("Rust");
let s1_r = &s1;
{
let s2 = String::from("C");
let res = the_longest(s1_r, &s2);
println!("{} is the longest", res); // Rust is the longest
}
}

晚限定,就是对象在被定义的时候,他的泛型类型是没有被限定(为具体类型)的,只有在实际调用的时候才会被限定为是何类型。

在定义the_longest时只是确定了他们生命周期之间的关系;只有在具体的使用的时候,我们才需要判断个生命周期的实例,与上面函数中定义的是否一致。

生命周期参数只是开发与与编译期之间的一种约定,对实际代码的运行不做影响。

这一切是在编译期完成的。

early bound

鸿蒙: