Возьмем следующий фрагмент кода:
fn main() -> std::result::Result<(), std::io::Error> {
println!("Bonjour le Monde");
Ok(())
}
Это прекрасный код, но мне было интересно, что произойдет, если я изменю тип ошибки на std :: error :: Error:
fn main() -> std::result::Result<(), std::error::Error> {
println!("Bonjour le Monde");
Ok(())
}
Это больше не хорошо:
ошибка [E0277]: размер для значений типа (dyn std::error::Error + 'static)
не может быть известен во время компиляции
Я исправил это так:
fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
println!("Bonjour le Monde");
Ok(())
}
Так почему основная функция требует Box <> для стандартных ошибок, а не для ошибок ввода-вывода?