Chcę zaimplementować program budujący podobny do debugowania builders zdefiniowany przez bibliotekę standardową. Zdefiniowane są one za pomocą struktur jak następuje:Czy <'a, 'b: 'a> oznacza, że życie "b musi przeżyć całe życie"?
struct DebugFoo<'a, 'b: 'a> {
fmt: &'a mut std::fmt::Formatter<'b>
}
Ponieważ ja nie rozumiem, co postaci <'a, 'b: 'a>
środków ani znajdę to wspomniane w książce rdzy lub odniesienie Rust (przynajmniej dotyczące wcieleń), po prostu starał się usunąć, czego nie rozumiemy, aby zobaczyć co się dzieje:
struct DebugFoo<'a, 'b> {
fmt: &'a mut std::fmt::Formatter<'b>
}
Kompilacja mi ten błąd:
in type `&'a mut core::fmt::Formatter<'b>`, reference has a longer
lifetime than the data it references
i to uwaga:
the pointer is valid for the lifetime 'a as defined on the struct at 1:0
but the referenced data is only valid for the lifetime 'b as defined on
the struct at 1:0
To ma sens do mnie: 'a
i 'b
różne okresy tak, aby być po bezpiecznej stronie, Rust (? Kontrolujący pożyczyć) zakłada, że 'a
przeżyje 'b
i wyrzuca błąd.
Teraz mogę zgadywać, że <'a, 'b: 'a>
oznacza, że czas życia 'b
musi być dłuższy niż czas życia 'a
. Zgadłem, prawda? Czy jest coś więcej? Jak mogę to udokumentować?