生存期間注釈記法
2022/2/21 0:37: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 {
| ++++ ++ ++ ++
生存期間注釈がなんもわからん。これ付けると何が起こるんだ。説明になってない。英文のほう読まないと分からないタイプのやつか。
いや、原理的に難しいんだこれ。
https://doc.rust-jp.rs/book-ja/ch10-03-lifetime-syntax.html#ライフタイム注釈記法
これを読み込んでたらちょっとづつ分かるようになってきた。
「コンパイラになってみましょう」
難しいことを仰る。