day 39 @rust ライフタイム注釈

関数が参照を引数にもちかつ、複数個あり、そのどちらかが戻り値になるとき
戻り値の参照先の値の寿命によってはダングリング参照が起きる。
なのでrustでは寿命が異なる時はコンパイルできないようになっている。
それを解決するためにライフタイム注釈というものがある。

fn func<'a>(s1: &'a String, s2: &'a String) -> &'a String {
    if hoge {
        s1
    } else {
        s2
    }
}

この時、s1とs2の寿命は短い方に自動的に合わせられる。(ライフタイムの変更はしない)
これによってfuncの戻り値を使う関数の借用チェッカーが正しくチェックできるようになる。