История изменений
Исправление vlad9486, (текущая версия) :
Код-то может быть и не смешан, но парсер может запрашивать очередной блок входных данных, что повлечет ввод-вывод (естественно, с потенциальными ошибками ввода-вывда).
Но парсеру эти ошибки никто не передаст. Они будут обработаны там где происходит IO.
trait IO {
fn read_more(&mut self, buffer: &mut [u8]) -> usize;
}
fn reader() -> impl IO { /* handle io errors here */ }
fn parse(io: &mut impl IO) -> Data { /* ... */ }
fn main() {
let mut io = reader();
let data = parse(&mut io);
// ...
}
И никаких ?
.
Исходная версия vlad9486, :
?
пробрасывает ошибку снизу вверх, а не сверху вниз. Парсер будет ниже по стеку, в нем не будет ничего от ввода-вывода, он всегда будет вызываться на готовых данных и если произошла ошибка ввода вывода, он об этом не узнает.
Код-то может быть и не смешан, но парсер может запрашивать очередной блок входных данных, что повлечет ввод-вывод (естественно, с потенциальными ошибками ввода-вывда).
Но парсеру эти ошибки никто не передаст. Они будут обработаны там где происходит IO.
trait IO {
fn read_more(&mut self, buffer: &mut [u8]) -> usize;
}
fn reader() -> impl IO { /* handle io errors here */ }
fn parse(io: &mut impl IO) -> Data { /* ... */ }
fn main() {
let mut io = reader();
let data = parse(&mut io);
// ...
}
И никаких ?
.