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

функцию которая принимает входные данные и массив решений, которые запускаются и сравниваются с правильным ответом и прочее. Входные данные всегда &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 ответов

4 просмотра

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
может что то и можно опустить из лайфтаймов, я виж...

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

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

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

Карта сайта