ライフタイム省略

関数の引数と戻り値のライフタイムは完全に指定されている必要がありますが、Rust では多くの場合、 いくつかの単純なルール によってライフタイムを省略できます。 これは推論ではなく、単なる構文上の省略記法です。

  • ライフタイム注釈を持たない各引数には、ライフタイムが 1 つ与えられます。
  • 引数のライフタイムが 1 つしかない場合、そのライフタイムが注釈のないすべての戻り値に与えられます。
  • 引数のライフタイムが複数ある場合でも、最初のものが self に対するものであれば、そのライフタイムが注釈のないすべての戻り値に与えられます。
// 著作権 2024 Google LLC
// SPDX-License-Identifier: Apache-2.0

fn only_args(a: &i32, b: &i32) {
    todo!();
}

fn identity(a: &i32) -> &i32 {
    a
}

struct Foo(i32);
impl Foo {
    fn get(&self, other: &i32) -> &i32 {
        &self.0
    }
}
  • ライフタイム省略ルールを各サンプル関数にどのように適用するかを順に確認してください。only_args は 1 つ目のルールで完成し、identity は 2 つ目で完成し、Foo::get は 3 つ目で完成します。

  • 3 つの省略ルールを適用してもすべてのライフタイムが埋まらない場合は、注釈を手動で追加するように指示するコンパイラエラーが表示されます。