語法'a
在兩種不同情況下的實際使用:
第一種情況,標記一個循環:
fn main() {
'a: loop {
println!("{}", 3);
break 'a;
}
}
在這裏,'a
清楚地描繪了循環體的壽命,並且允許一次性打破多層循環。
第二,和更類似的情況中,使用'a
來表示結合:
fn<'a> susbtr(haystack: &'a str, offset: usize) -> &'a str;
在這種情況下,壽命'a
並不代表變量的實際的壽命,它代表了一個綁定參考變量的生命週期,並允許搭配在一起各種變量的界限。
注意,主叫方和被叫方解釋必然不同:
- 從調用者的角度來看,
'a
是上限,返回值將至少爲萬歲一個承諾作爲參數(甚至更長的時間,不能保證)
- 從被叫用戶的角度(即
substr
),'a
是下限,檢查任何返回的值必須住至少只要作爲參數(甚至更長的時間,沒有必要)
當單個結合的用於多個壽命我們可以有自結合的方差並不代表實際的壽命,則編譯器將簡單地推斷的最低/最高結合有意義的局面:
- 呼叫者得到最低上限可行(即,至少保證)
- 呼叫者獲得最高下界可行(即,至少約束)
例如:
fn<'b> either(one: &'b str, two: &'b str, flag: bool) -> &'b str {
if flag { one } else { two }
}
可以與被稱爲:
fn<'a> call(o: &'a str, flag: bool) -> &'a str {
either(o, "Hello, World", flag)
}
這裏,o
壽命是未知的(一些'a
),同時"Hello, World"
的生命週期是已知的('static
),'static
根據定義是壽命中較長的一個(它爲所有程序生活)。
- 的
call
調用者只知道返回值居住至少只要o
call
必須保證這一點,它提供o
和"Hello, World"
到either
其中'b
推斷爲'a
之間的最下'static
(因此'a
)
either
只需返回與它的任一論點一樣長的東西;它不知道他們的一生可能會有所不同,並且不在意
感謝您的回答和鏈接!這非常有幫助 –