视频地址
头条地址:https://www.ixigua.com/i6775861706447913485
B站地址:https://www.bilibili.com/video/av81202308/
讲解内容
1、方法定义中的生命周期注解
(1)结构体字段的生命周期必须总是在impl关键字之后声明并在结构体名称之后使用,因为这些声明周期是结构体类型的一部分。
例子1:
struct StuA<'a> {
name: &'a str,
}
impl<'a> StuA<'a> {
fn do_something(&self) -> i32 {
3
}
}
例子2:
struct StuA<'a> {
name: &'a str,
}
impl<'a> StuA<'a> {
fn do_something2(&self, s: &str) -> &str { //此处符合声明周期注解省略的第三条规则
self.name
}
}
例子3:
struct StuA<'a> {
name: &'a str,
}
impl<'a> StuA<'a> {
fn do_something2<'b>(&self, s: &'b str) -> &'b str {
//self.name
s
}
}
fn main() {
let s = String::from("andy");
let a = StuA {name: &s};
let s1 = String::from("Andy");
let ss = a.do_something2(&s1);
println!("ss = {}", ss);
println!("Hello, world!");
}
2、静态生命周期
定义方式:'static,其生命周期存活于整个程序期间。所有的字符字面值都拥有’static生命周期,我们可以如下来标注:
let s: &'static str = "I have a static filetime";