Привет, я еще довольно нуб. Решаю разные задачи и сделал

функцию которая принимает входные данные и массив решений, которые запускаются и сравниваются с правильным ответом и прочее. Входные данные всегда &str, а ответ может быть любым (только приводимым к строке). Упрощенный пример выглядит так:

fn run<R: Display>(solutions: &[&dyn Fn(&str) -> R])

fn solution_1 (input: &str) -> i32
fn solution_2 (input: &str) -> usize

run(&[&solution_1, &solution_2])

я понимаю почему это не работает, но не знаю как можно переписать run чтоб было не ужасно. Сейчас я справляюсь тем что оборачиваю в кложуру и привожу к одному типу там. Менять код самих решений очень не хочется. Что тут лучше сделать?

более подробный пример
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=bcfa66d49eea087fbd643ac87d115cbe

6 ответов

10 просмотров

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=70670caf1e8ffb0a997354c7727f941a

Nikolay-Morozov Автор вопроса
Maxim Biryukov
https://play.rust-lang.org/?version=stable&mode=de...

охтыж, спасибо, подходит!) всё по отдельности кое-как понимаю, но как такая штука вместе работает еще предстоит понять)

Nikolay Morozov
охтыж, спасибо, подходит!) всё по отдельности кое-...

" Сейчас оборачиваю решения в кложуру и внутри привожу к одному типу" вот я сделал по сути то же самое. adapt принимает функцию, которая возвращает тип, имплементящий Display, а возвращает функцию которая возвращает Box, внутри которого тип, имплементящий Display а из таких функций уже можно создавать массивы ну и уточнение, что это не функции а Fn трейт на входе и выходе

Nikolay-Morozov Автор вопроса
Maxim Biryukov
" Сейчас оборачиваю решения в кложуру и внутри при...

тоже это подумал, но почему именно эта россыпь из лайфтаймов + box/dyn работает позже посижу разберусь, пока такое чаще разруливаю копипастой что советует компилятор

Nikolay Morozov
тоже это подумал, но почему именно эта россыпь из ...

может что то и можно опустить из лайфтаймов, я вижу ошибку лайфтайма - расписываю все: кто кого должен пережить - ошибка уходит может где то и лишний так появляется, который компилятор сам мог вывести

Nikolay-Morozov Автор вопроса
Maxim Biryukov
может что то и можно опустить из лайфтаймов, я виж...

ага, все чаще замечаю что переписываю код, который раньше почти бездумно копировал из подсказок компилятора, и получается лучше) иногда даже вижу логику почему именно так советовал, но оказывается можно просто иначе. Спасибо еще раз, есть под чем подумать)

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

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

Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
7
Всем привет. Не понимаю, в чём тут шутка юмора. Убирается только разрешение на send_messages. А send_media_messages остаётся. Как сделать, чтобы оба убирались? await b...
Alexander
2
Есть тут кто занимается разработкой серваков майна? Или знакомые
meow *
3
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Есть ли лимиты на кол-во вебхук по домену? Стоит в данный момент 900+ ботов и бывает бот перестает отвечать (не приходят вебхуки) 🐒 Помогает только перезапуск
ᅠ [ Кому не ответил, дублируйте ]
11
Товарищи, здравствуйте Подскажите, пожалуйста, может кто-нибудь сталкивался с такой задачей Через вебапку можно сканировать qr-код, а есть ли возможность считывать nfc?
Artem Stormageddon
8
а что делать если тебя убивают на картах?
Yarik yarik kyda ti lezesh
43
Карта сайта