t_wの輪郭

Feedlyでフォローするボタン

&'

2022/2/20 23:16:00

missing lifetime specifier

2022/2/20 23:34:00
fn longest(x: &str, y: &str) -> &str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

fn main() {
    let str1 = "str1";
    let str2 = "str2 hogehoge";
    let long = longest(&x, &y);
}
error[E0106]: missing lifetime specifier
 --> src\main.rs:1:33
  |
1 | fn longest(x: &str, y: &str) -> &str {
  |               ----     ----     ^ expected named lifetime parameter
  |
  = help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from `x` or `y`
help: consider introducing a named lifetime parameter
  |
1 | fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
  |           ++++     ++          ++          ++

あれ

2022/2/21 0:38:00

生存期間注釈がなんもわからん。これ付けると何が起こるんだ。説明になってない。英文のほう読まないと分からないタイプのやつか。
いや、原理的に難しいんだこれ。

https://doc.rust-jp.rs/book-ja/ch10-03-lifetime-syntax.html#ライフタイム注釈記法
これを読み込んでたらちょっとづつ分かるようになってきた。

「コンパイラになってみましょう」
難しいことを仰る。