Что означает конструкция <'_> после типа?
В коде на Rust (из книги "Rust в действии") увидел такой фрагмент:
impl fmt::Display for UpstreamError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{:?}", self)
}
}
Смутил тип аргумента f - fmt::Formatter<'_>. Вопрос - что означает конструкция <'_> после типа?
Надеюсь, понятно объяснил, если нет, пишите в комментариях.
PS: в интернете искал, но ничего не нашёл.
Ответы (2 шт):
lifetime. После одинарной кавычки пишется любое имя лайфтайма, кроме зарезервированного 'static.
Данный тип требует generic-параметр lifetime, а конструкция <'_> предлагает компилятору автоматически вывести требуемый lifetime. Например, если нужно вернуть из функции итератор, то нужно объявить её примерно так:
fn foo() -> impl Iterator<Item = SomeType> + <'_>
т.к. итератор содержит ссылку на итерируемый объект и мы должны соблюсти время жизни этой ссылки.