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

Несколько времён жизни

В Rust каждый параметр-ссылка может иметь своё собственное время жизни. Когда функция принимает несколько ссылок с разными временами жизни, компилятор должен понимать, как они связаны между собой. Синтаксис нескольких времён жизни позволяет явно указать эти связи, давая компилятору информацию о том, что результат зависит от одного конкретного параметра, а не от всех сразу. Параметрами выступают имена времён жизни, которые объявляются в угловых скобках после имени функции.

Синтаксис

fn func<'a, 'b>(x: &'a str, y: &'b str) -> &'a str { // ... }

Пример

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

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

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

"abcde"

Пример

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

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

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

"12345"

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

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