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

Https://Play.Rust-Lang.Org/?Version=Stable&Mode=Debug&Edition=2018&Gist=Caddb53f8642ea2f61ffbbd328261f70 Проблемы с лайфтаймами что происходит в коде: я создаю тип Handler<Handler<()>>

который означает что на вход он принимает некий Input и следующий Handler<()> (chain of responsibilty по сути). далее я делаю pipe_to() на Handler<()> (следующий обработчик). и я хочу создать третий Handler который берет первый обработчик, передает туда Input и второй обработчик (вызывать ли второй обработчик - решает первый). А лайфтаймы не сходятся - не могу создать этот третий хендлер.

Здесь from_fn() - это хендлер который является кложурой которая замыкает в себе self и child, а потом выдает футуру которая живет может жить столько же, сколько живет этот третий Handler (а, соответственно, и замыкание). но раст выдает как всегда какую-то ересь вместо объяснения ошибки. как мне кажется все должно быть правильно - у нас время жизни футуры, в которую мы кидаем оба хендлера, зависит от времени жизни кложуры, которая замыкает оба хендлера. что я делаю не так?

7 ответов

6 просмотров

Чего-то супер переусложненно и непонятно зачем Так не пойдет?: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=bc2e73fe76cf40241a8e1658337cf906

Dmytro-Polunin Автор вопроса
kitsu
Чего-то супер переусложненно и непонятно зачем Так...

FnOnce не подходит, обработчик на то и обработчик, что может вызываться много раз

Трейт Fn не позволяет описать замыкание, возвращающее ссылку на свои внутренности. Так что в этом виде работать не будет: футура содержит ссылку на внутренность замыкания. Все эти 'a говорят только о том, что замыкания и футура могут содержать ссылки на какие-то внешние по отношению к ним данные. Как исправить? Можно использвать Arc вместо Box и клонировать его

Dmytro-Polunin Автор вопроса
red75prime
Трейт Fn не позволяет описать замыкание, возвращаю...

у меня этот код на арках уже есть - я хочу уйти от них

Dmytro Polunin
у меня этот код на арках уже есть - я хочу уйти от...

GATы нужны для замены Fn на какой-нибудь trait Call { type Output<'a>; fn call(&self) -> Self::Output<'_>; }. Ну и это ограничит возможности использования: спавнить полученные футуры не получится

Dmytro-Polunin Автор вопроса
red75prime
GATы нужны для замены Fn на какой-нибудь trait Cal...

спавнить не 'static в принципе невозможно по идеи

Dmytro Polunin
спавнить не 'static в принципе невозможно по идеи

Да. Я имею в виду по сравнению с Arc'ами

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

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

Всем привет, на линуксе лучше на 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
было так ;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
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
Evo 1.4.34 PHP 7.4 Все работало штатно. На ровном месте SimpleGallery начал выдавать ошибку Что может быть? Уже все переустановил по новой. Места хватает. Хостинг reg.ru
Paul Savchenkov
6
здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
Карта сайта