day 40 @rust 関数の引数のライフタイムのルール

ライフタイム注釈は元々は省略して描くということができなかった。
しかしrustの開発をしてくれている人たちがその法則性を元にルールを作ったので現在では省略できている。

ルール.1
省略した場合それぞれの引数に対してライフタイムが生成される。

fn func1(s1: &str, s2: &str) { }
//したの形になる。
fn func2<'a, 'b>(s1: &'a str, s2: &'b str) { }

ルール.2
引数が一つだった場合すべての戻り値に対して引数のライフタイムが適用される。

fn func1(s1: &str) -> &str { // do something }
//したの形になる。
fn func2<'a, 'b>(s1: &'a str) -> &'a str { // do something }

ルール.3
引数の中に&self もしくは&mut selfがある、つまりメソッドのとき、戻り値にはselfのライフタイムが適用される。

ルール.4
ジェネリックライフタイムを使うと短いライフタイムの方に合わせる。