頭條地址:https://www.ixigua.com/i677586170644791348...
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";
本作品採用《CC 協議》,轉載必須註明作者和本文連結