生命周期进阶
学习目标
- 理解生命周期省略规则细节
- 掌握高阶 trait bound (HRTB)
- 理解生命周期子类型
核心概念
省略规则详解
fn f(a: &str, b: &str) -> ...
fn f<'a, 'b>(a: &'a str, b: &'b str) -> ...
fn f(a: &str) -> &str
fn f<'a>(a: &'a str) -> &'a str
fn f(&self, x: &str) -> &str
fn f<'a, 'b>(&'a self, x: &'b str) -> &'a str
高阶 Trait Bound (HRTB)
fn apply<F>(f: F, s: &str) -> String
where
F: for<'a> Fn(&'a str) -> &'a str,
{
f(s).to_string()
}
生命周期子类型
fn longer<'a: 'b, 'b>(x: &'a str, _y: &'b str) -> &'b str {
x
}
匿名生命周期
fn process(s: &str) -> &'_ str {
&s[..1]
}
impl MyStruct<'_> {
fn method(&self) -> &str { "" }
}
小结
| 概念 | 说明 |
|---|
| 省略规则 | 3 条规则自动推断 |
for<'a> | 高阶生命周期 |
'a: 'b | 生命周期约束 |
'_ | 匿名生命周期 |
'static | 最长生命周期 |