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); } }
|
晚限定,就是对象在被定义的时候,他的泛型类型是没有被限定(为具体类型)的,只有在实际调用的时候才会被限定为是何类型。
在定义the_longest
时只是确定了他们生命周期之间的关系;只有在具体的使用的时候,我们才需要判断个生命周期的实例,与上面函数中定义的是否一致。
生命周期参数只是开发与与编译期之间的一种约定,对实际代码的运行不做影响。
这一切是在编译期完成的。
early bound
鸿蒙: