#Rust 以下の関数について。 ```rust fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &str { ``` [[戻り値型]]の[[ライフタイム引数]]は`'a`か`'b`のいずれかでなければいけない。つまり ```rust fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &'a str { ``` または ```rust fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &'b str { ``` である必要がある。 ## 理由 引数以外の[[参照]]を返却する場合、関数内で新たな[[参照]]を生成する必要がある。しかし、それらは関数の終わりにスコープを抜けるので確実に[[ダングリング参照]]になり、利用できない。 ```rust fn longest(x: &str, y: &str) -> &str { if x.len() > y.len() { let s1 = "hoge"; s1 // ここでs1は終了 } else { let s2 = "hoge"; s2 // ここでs2は終了 } } ``` そのため、返せる[[参照]]は引数として渡された`x`または`y`のみとなる。