Я хочу реализовать построитель, похожий на debug builders, определенный стандартной библиотекой. Они определяются с использованием таких структур, как:
struct DebugFoo<'a, 'b: 'a> {
fmt: &'a mut std::fmt::Formatter<'b>
}
Так как я не понимаю, что означает форма <'a, 'b: 'a>
, и я не могу найти ее в книге Rust или ссылке Rust (по крайней мере, относительно сроков жизни), я просто попытался удалить то, что я не понимаю, чтобы увидеть что происходит:
struct DebugFoo<'a, 'b> {
fmt: &'a mut std::fmt::Formatter<'b>
}
Составив его, я получаю эту ошибку:
in type `&'a mut core::fmt::Formatter<'b>`, reference has a longer
lifetime than the data it references
И это примечание:
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
Имеет смысл для меня: 'a
и 'b
- разные времена жизни, поэтому, чтобы быть в безопасности, Rust (средство проверки займа?) предполагает, что 'a
переживет 'b
и выдает ошибку,
Теперь я могу предположить, что <'a, 'b: 'a>
означает, что время жизни 'b
должно быть больше времени жизни 'a
. Я правильно понял? Или есть еще? Как я могу найти его документированным?