работает lifetime elision если непонятно к какому лайфтайму привязываться: &self или T?
self
Но это неочевидно. Почему не к T?
У T нет лайфтайма, там же by value
У любого дженерика есть лайфтайм
Равный телу функции.
Это правило lifetime elision. Если есть &self, то выходной лайфтайм привязывается именно к нему.
То есть lifetime elision может вывести неверные лайфтаймы?
Он не выводит лайфтамы. Он позволяет их не писать для часто используемых случаев. Если нужный случай не подходит под правила lifetime elision, то надо писать явно.
Он всегда выводит корректные лайфтаймы. Но необязательно верные.
Ну вот в этому случае он выведет fn foo<'self, T>(&'self self, _: T) -> Some<'self> А это может быть неверно
Даже спустя два года узнаешь что-то новое про лайфтаймы
Да, может получится не то что нужно. Это не вывод лайфтаймов. Это небольшое упрощение жизни.
Об этом в растбуке написано же. В разделе лайфтайм элижон. 😁
в том числе поэтому это elision, а не inference 😆
Он их может вывести слишком строго или не вывести вообще. Для вывода есть 4 общих правила, если ничего нового не добавили.
Обсуждают сегодня