Означает ли <'a,' b: 'a>, что время жизни' b должно пережить время жизни 'a?
Я хочу реализовать конструктор, похожий на отладкустроители определяется стандартной библиотекой. Они определяются с использованием структур, подобных следующим:
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
, Я угадал правильно? Или есть еще? Как я могу найти это задокументировано?