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

Lifetime в функциях

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

Синтаксис

fn имя_функции<'a>(параметр: &'a Тип) -> &'a Тип { // тело функции }

Пример

Давайте напишем функцию, которая возвращает ссылку на более длинную из двух строк. Без указания времени жизни компилятор не сможет определить, к какому параметру привязано возвращаемое значение:

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { if x.len() > y.len() { x } else { y } } fn main() { let s1 = "abcde"; let s2 = "12345"; let res = longest(s1, s2); println!("{}", res); }

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

"abcde"

Пример

Давайте рассмотрим случай, когда время жизни ссылок различается. Функция все равно сможет вернуть ссылку, так как аннотация 'a указывает на пересечение времен жизни:

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { if x.len() > y.len() { x } else { y } } fn main() { let s1 = String::from("abcde"); let res; { let s2 = String::from("12345"); res = longest(&s1, &s2); } println!("{}", res); }

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

"abcde"

Пример

Если функция не возвращает ссылку, указывать время жизни не обязательно, даже если на вход приходят ссылки:

fn print_str(s: &str) { println!("{}", s); } fn main() { let s1 = "abcde"; print_str(s1); }

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

"abcde"

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

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