Rust 匿名ライフタイム

  • '_ のこと
    • 参照には必ずライフタイムが割り当てられる

ライフタイムの省略ルール

  1. 引数に対して省略したライフタイムはそれぞれ別のライフタイムになる
  2. 引数のライフタイムが1つしか無いときはそれが返り値で省略されたライフタイムになる
  3. メソッドの引数に複数のライフタイムがあって、そのうちひとつが &Self 型か &mut Self 型である場合、そのライフタイムが返り値で省略されたライフタイムに適用されます。
struct Foo {
    items: Vec<i32>,
}
 
impl Foo {
    fn items(&self) -> std::slice::Iter<i32> {
        self.items.iter()
    }
}

は省略しないで書くと

fn items<'a>(&'a self) -> std::slice::Iter<'a, i32> {
    self.items.iter()
}

ライフタイムが省略されていることを明示できる

impl のライフタイム

impl Hoge<'_> {
  pub new(foo: &str, bar: &str) -> Self {}
}

は foo と bar のライフタイムを省略したのでlifetimeがmismatchと言われる.なので明示的に合わせる必要がある

impl<'a> Hoge <'a> {
  pub new(foo: &'a str, bar: &'a str) -> Self
}

参考文献