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

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

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

15 ответов

8 просмотров

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 общих правила, если ничего нового не добавили.

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

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

Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Всем привет, на линуксе лучше на fasm или nasm учиться писать для начала ?
meszjol
14
Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
было так ;void set_http_ver(RESPD* ptr, char* version, uint32_t length) // example: 'RTSP/1.1 ' set_http_ver: mov eax, [esp + 4] mov ecx, [esp + 8] ...
Mixail Frolov
5
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
Карта сайта