Анотації тривалісті життя
Посилання має тривалість життя, яка не повинна “пережити” значення, на яке воно посилається. Це перевіряється чекером запозичень.
Тривалість життя може бути неявною - це те, що ми бачили досі. Часи життя також можуть бути явними: &'a Point'',
&‘document str’’. Тривалість життя починається з '
, а 'a
є типовим іменем за замовчуванням. Читати &'a Point
як “запозичений Point
, який є дійсним принаймні протягом тривалості життя a
”.
Тривалість життя завжди визначається компілятором: ви не можете призначити час життя самостійно. Явні анотації часу життя створюють обмеження там, де існує неоднозначність; компілятор перевіряє, чи існує правильний розв’язок.
Часи життя ускладнюються, якщо врахувати передачу значень у функції та повернення значень з них.
Speaker Notes
This slide should take about 10 minutes.
У цьому прикладі компілятор не знає, яку тривалість життя виводити для p3
. Якщо зазирнути у тіло функції, то можна з упевненістю припустити, що час життя p3
є меншим з двох: p1
та p2
. Але так само, як і типи, Rust вимагає явних анотацій тривалості життя для аргументів функції та значень, що повертаються.
Додає 'a
відповідним чином до left_most
:
fn left_most<'a>(p1: &'a Point, p2: &'a Point) -> &'a Point {
Це говорить, що “за умови, що p1 і p2 живуть довше за 'a
, значення, що повертається, живе принаймні 'a
.
У поширених випадках час життя можна опустити, як описано на наступному слайді.