<'A,' b: 'a> significa que a vida' b deve sobreviver à vida 'a?
Eu quero implementar um construtor semelhante à depuraçãoconstrutores definido pela biblioteca padrão. Eles são definidos usando estruturas como as seguintes:
struct DebugFoo<'a, 'b: 'a> {
fmt: &'a mut std::fmt::Formatter<'b>
}
Desde que eu não entendo o que a forma<'a, 'b: 'a>
significa que nem posso encontrá-lo mencionado no livro Rust ou na referência Rust (pelo menos em relação à vida útil), tentei remover o que não entendi para ver o que acontece:
struct DebugFoo<'a, 'b> {
fmt: &'a mut std::fmt::Formatter<'b>
}
Compilando, recebo este erro:
in type `&'a mut core::fmt::Formatter<'b>`, reference has a longer
lifetime than the data it references
E esta nota:
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
Faz sentido para mim:'a
e'b
Há vidas diferentes, portanto, para estar do lado seguro, Rust (o verificador de empréstimos?) assume que'a
sobreviverá'b
e lança o erro.
Agora posso adivinhar<'a, 'b: 'a>
significa que a vida'b
deve ser maior que a vida útil'a
. Eu adivinhei certo? Ou tem mais? Como posso encontrá-lo documentado?