功能引數(輸入壽命)
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 {