Rust 程式設計影片教程(進階)——004_3 生命週期省略

linghuyichong發表於2020-01-12

頭條地址:https://www.ixigua.com/i677586170644791348...
B站地址:https://www.bilibili.com/video/av81202308/

生命週期省略
例如:

fn get_s(s: &str) -> &str {
    s
}

(1)沒有生命週期註解卻能夠編譯,原因:早期的rust中必須顯式的宣告生命週期,後來rust團隊將很明確的模式進行了註解的簡化。
(2)遵守生命週期省略規則的情況下能明確變數的宣告週期,則無需明確指定生命週期。函式或者方法的引數的生命週期稱為輸入生命週期,而返回值的生命週期稱為輸出生命週期。
(3)編譯器採用三條規則判斷引用何時不需要生命週期註解,當編譯器檢查完這三條規則後仍然不能計算出引用的生命週期,則會停止並生成錯誤。
(4)生命週期註解省略規則適用於fn定義以及impl塊定義,如下:
a、每個引用的引數都有它自己的生命週期引數。例如如下:
一個引用引數的函式,其中有一個生命週期:
fn foo<'a>(x: &'a i32)
兩個引用引數的函式,則有兩個生命週期 :
fn foo<'a, 'b>(x: &'a i32, y: &'b i32)
以此類推。
b、如果只有一個輸入生命週期引數,那麼它被賦予所有輸出生命週期引數:

          fn foo(x: &i32) -> &i32   等價於  fn foo<'a>(x: &'a i32) -> &'a i32
c、如果方法有多個輸入生命週期引數,不過其中之一因為方法的緣故為&self或者&mut self,那麼self的生命週期被賦予所有輸出生命週期引數。例子在下面來看。
本作品採用《CC 協議》,轉載必須註明作者和本文連結
令狐一衝

相關文章