明示的アノテーション
借用チェッカーは参照がどれだけの間有効かを決定するために、明示的なアノテーションを使用します。ライフタイムが省略1されなかった場合、Rustは参照のライフタイムがどのようなものであるか、明示的なアノテーションを必要とします。
foo<'a>
// `foo` has a lifetime parameter `'a`
// `foo`は`'a`というライフタイムパラメータを持ちます。
クロージャと同様、ライフタイムの使用はジェネリクスを必要とします。もう少し詳しく言うと、この書き方は「foo
のライフタイムは'a
のそれを超えることはない。」ということを示しており、型を明示した場合'a
は&'a T
となるということです。
ライフタイムが複数ある場合も、同じような構文になります。
foo<'a, 'b>
// `foo` has lifetime parameters `'a` and `'b`
// `foo`は`'a`と`'b`というライフタイムパラメータを持ちます。
この場合は、foo
のライフタイムは'a
、'b
の いずれよりも 長くなってはなりません。
以下はライフタイムを明示的に書く場合の例です。
1
省略 はライフタイムが暗黙のうちに(プログラマから見えない形で)アノテートされることを指します。