РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
477 of 1245 menu

Lifetime в структурах

Параметры времени жизни (lifetime) в структурах позволяют хранить ссылки внутри полей структуры. Если структура содержит хотя бы одно поле-ссылку, ей необходим параметр времени жизни, который указывает, как долго эта ссылка должна быть валидной. Параметром структура принимает имя времени жизни, которое записывается после имени структуры в угловых скобках.

Синтаксис

struct Name<'a> { field: &'a Type, }

Пример

Давайте создадим структуру Book, которая хранит ссылку на строку с названием:

struct Book<'a> { title: &'a str, } fn main() { let title = String::from("abcde"); let book = Book { title: &title }; println!("{}", book.title); }

Результат выполнения кода:

"abcde"

Пример

Структура может содержать несколько полей-ссылок с одним временем жизни:

struct Pair<'a> { first: &'a str, second: &'a str, } fn main() { let a = String::from("abcde"); let b = String::from("12345"); let pair = Pair { first: &a, second: &b }; println!("{} {}", pair.first, pair.second); }

Результат выполнения кода:

"abcde 12345"

Пример

Если структура содержит несколько ссылок с разным временем жизни, можно указать несколько параметров:

struct Mixed<'a, 'b> { first: &'a str, second: &'b str, } fn main() { let a = String::from("abcde"); let b = String::from("12345"); let res = Mixed { first: &a, second: &b }; println!("{} {}", res.first, res.second); }

Результат выполнения кода:

"abcde 12345"

Пример

Времена жизни можно использовать в методах структуры:

struct Book<'a> { title: &'a str, } impl<'a> Book<'a> { fn get_title(&self) -> &'a str { self.title } } fn main() { let title = String::from("abcde"); let book = Book { title: &title }; println!("{}", book.get_title()); }

Результат выполнения кода:

"abcde"

Смотрите также

  • раздел lifetime,
    который описывает общую концепцию времени жизни
  • раздел fn-lifetime,
    который описывает времена жизни в функциях
  • раздел multiple-lifetimes,
    который описывает несколько параметров времени жизни
  • раздел lifetime-elision,
    который описывает автоматический вывод времени жизни
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить