Что означает конструкция <'_> после типа?

Рейтинг: 0Ответов: 2Опубликовано: 20.02.2023

В коде на Rust (из книги "Rust в действии") увидел такой фрагмент:

impl fmt::Display for UpstreamError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "{:?}", self)
    }
}

Смутил тип аргумента f - fmt::Formatter<'_>. Вопрос - что означает конструкция <'_> после типа?

Надеюсь, понятно объяснил, если нет, пишите в комментариях.

PS: в интернете искал, но ничего не нашёл.

Ответы

▲ 1Принят

Данный тип требует generic-параметр lifetime, а конструкция <'_> предлагает компилятору автоматически вывести требуемый lifetime. Например, если нужно вернуть из функции итератор, то нужно объявить её примерно так:

fn foo() -> impl Iterator<Item = SomeType> + <'_>

т.к. итератор содержит ссылку на итерируемый объект и мы должны соблюсти время жизни этой ссылки.

▲ 1

lifetime. После одинарной кавычки пишется любое имя лайфтайма, кроме зарезервированного 'static.