не могу логики понять зачем нужны лайфтаймы ? 'a ... И статьи перечитал и в книжке , не понял . Может кто кратко логику объяснить ? Зачем всем параметрам присваивать лайфтайм если можно выдать лайфтайм конечного возвращаемого результата ? Почему в Раст приняли именно такое решение ? fn life<'a>(variable : &'a i32, second: &'a i32) ?
функции не присваивают ссылочные типы, поэтому функция должна знать как жизни тех значений, на которых ссылаются входящие параметры, соотносятся друг с другом - по умолчанию раст устанавливает различные лайфтаймы каждому параметру ('а, 'b, 'c и т. д.) и это может вызвать проблемы, поэтому, если у значений одинаковый период жизни (т. е. если они дропнутся в одной и той же точке кода) - то их ссылкам нужно передать одинаковый лайфтайм во внешнем коде (то бишь в функции, которая принимает эти ссылочные параметры)
Скажем let а; a = function (&a) ; и а дропается в функции , получается внешняя а должна знать когда и где она закончится ?
Попробуйте так сделать, будет сюрприз
А всё , понял
этот код вызовет ошибку и не потому что вместо fn написано function, понимание лайфтаймов придет, когда будете писать реальную боевую программу - там компилятор сам заставит вас разобраться что к чему, сейчас на теоретических примерах сложно понять
у вас опыта намного больше, ответьте пожалуйста на вопрос https://t.me/rust_beginners_ru/188368
Понял , спасибо
Обсуждают сегодня