Здравствуйте, T4r4sB, Вы писали:
TB>Можно, так делают в алгоритмах. А в функции парсинга джсона в структуру — уже свой Еррор один на всю либу. А в функции открытия файла — свой еррор. А если ты хочешь передать что твоя функция может обломаться тзза отсутствия файла или кривого содержимого файла — то проще всего промапить в Box<dyn Error>, но никакого автовывода множества возможных ошибок не будет. Зато хотя бы ? поддерживает автокаст любой ошибки в trait Error
Ну вот я и говорю — то, что в тайпскрипте работает само по себе из коробки, в расте требует каких-то унизительных приседаний, если вообще работает.
Я же показал код функции, которая смешивает типы ошибок. Там нет никаких ручных маппингов.
И её необязательно писать именно в виде single expression.
Можно писать в императивном стиле, с множественными return — и всё равно выведется общий тип.
Конкретно в тайпскрипте неудобно делать постоянные проверки, но он и не ставил перед собой цель порождать provably correct programs:
function foo()
{
let x = bar();
if(!isNumber(x)) return x;
let y = baz();
if(!isNumber(y)) return y;
return x+y;
}
Не знаю, насколько ужасно аналог такого кода будет выглядеть на Расте.