以下のようなコードの意味がわからなくて困りました。
/// 指定された参照の指す値を二倍し、参照をそのまま返す。
fn hoge<'a>(n: &'a mut usize) -> &'a usize {
*n *= 2;
n
}
hoge
の横の<'a>
を見て、関数のライフタイムって何だ?と思いました。
答え
この<'a>
は単にこれから'a
というライフタイムを表す変数を使うという宣言です。
普通のジェネリクスの型変数と同じです。
つまり上のコードにおいては「返り値のライフタイムは引数のn
のライフタイムに一致する」ということなのでした。
プログラミング言語Rustにもちゃんとそう書いてあるのですが、自分は誤読してしまいました。第二版 (和訳) ではそのような誤解がしづらくなっているようなので、これから学ぶ人はそちらをおすすめします。