Проблема в том, что любое будущее теоретически может вернуть ошибку. Таким образом, тип FutureResult
(который возвращается из fut_ok
) является общим с двумя параметрами типа: тип T
для успеха и тип E
для ошибок.
Если бы это был реальный код вместо игрушечного примера, у вас был бы некоторый код обработки ошибок, который позволил бы компилятору выводить тип E
. В этом случае вам нужно указать его, но так как вы его не используете, вы можете использовать пустой тип ()
. Таким образом, любое из следующих должно работать:
let tasks: Vec<FutureResult<_, ()>> = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
или
let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];
Обратите внимание, что первое, что имеет в виду компилятор, когда он говорит: «рассмотрите возможность придания tasks
типа».