功能参数(输入寿命)
fn foo<'a>(x: &'a u32) {
// ...
}
这指定 foo
具有寿命'a
,参数 x
必须具有至少'a
的寿命。函数生命周期通常通过生命周期省略省略 :
fn foo(x: &u32) {
// ...
}
在函数将多个引用作为参数并返回引用的情况下,编译器无法通过生命周期省略来推断结果的生命周期。
error[E0106]: missing lifetime specifier
1 | fn foo(bar: &str, baz: &str) -> &i32 {
| ^ expected lifetime parameter
相反,应明确指定生命周期参数。
// Return value of `foo` is valid as long as `bar` and `baz` are alive.
fn foo<'a>(bar: &'a str, baz: &'a str) -> &'a i32 {
函数也可以使用多个生命周期参数。
// Return value is valid for the scope of `bar`
fn foo<'a, 'b>(bar: &'a str, baz: &'b str) -> &'a i32 {