172 похожих чатов

Fn foo<T>(&self, data: T) -> &i32 { ... } Как здесь

работает lifetime elision если непонятно к какому лайфтайму привязываться: &self или T?

15 ответов

19 просмотров

self

Dmytro-Polunin Автор вопроса
Mikola Summer Duck
self

Но это неочевидно. Почему не к T?

Dmytro Polunin
Но это неочевидно. Почему не к T?

У T нет лайфтайма, там же by value

Dmytro-Polunin Автор вопроса
George C.
У T нет лайфтайма, там же by value

У любого дженерика есть лайфтайм

Dmytro Polunin
Но это неочевидно. Почему не к T?

Это правило lifetime elision. Если есть &self, то выходной лайфтайм привязывается именно к нему.

Dmytro-Polunin Автор вопроса
red75prime
Это правило lifetime elision. Если есть &self, то ...

То есть lifetime elision может вывести неверные лайфтаймы?

Dmytro Polunin
То есть lifetime elision может вывести неверные ла...

Он не выводит лайфтамы. Он позволяет их не писать для часто используемых случаев. Если нужный случай не подходит под правила lifetime elision, то надо писать явно.

Dmytro Polunin
То есть lifetime elision может вывести неверные ла...

Он всегда выводит корректные лайфтаймы. Но необязательно верные.

Dmytro-Polunin Автор вопроса
red75prime
Он не выводит лайфтамы. Он позволяет их не писать ...

Ну вот в этому случае он выведет fn foo<'self, T>(&'self self, _: T) -> Some<'self> А это может быть неверно

Dmytro-Polunin Автор вопроса
Mikola Summer Duck
Он всегда выводит корректные лайфтаймы. Но необяза...

Даже спустя два года узнаешь что-то новое про лайфтаймы

Dmytro Polunin
Ну вот в этому случае он выведет fn foo<'self, T>(...

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

Dmytro Polunin
Даже спустя два года узнаешь что-то новое про лайф...

Об этом в растбуке написано же. В разделе лайфтайм элижон. 😁

Dmytro Polunin
То есть lifetime elision может вывести неверные ла...

в том числе поэтому это elision, а не inference 😆

Dmytro Polunin
То есть lifetime elision может вывести неверные ла...

Он их может вывести слишком строго или не вывести вообще. Для вывода есть 4 общих правила, если ничего нового не добавили.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта