valores sentencia retornan que funciones return main rust

return - sentencia - funciones que retornan valores en php



¿Por qué Rust no tiene un valor de retorno en la función principal, y cómo devolver un valor de todos modos? (5)

A partir de Rust 1.26 , main puede devolver un Result :

use std::fs::File; fn main() -> Result<(), std::io::Error> { let f = File::open("bar.txt")?; Ok(()) }

El código de error devuelto en este caso es 1 en caso de error. Con File::open("bar.txt").expect("file not found"); en su lugar, se devuelve un valor de error de 101 (al menos en mi máquina).

Además, si desea devolver un error más genérico, use:

use std::error::Error; ... fn main() -> Result<(), Box<dyn Error>> { ... }

En Rust la función principal se define así:

fn main() { }

Sin embargo, esta función no permite un valor de retorno. ¿Por qué un idioma no permite un valor de retorno y hay una manera de devolver algo de todos modos? ¿Sería capaz de usar de manera segura la función de exit(int) C exit(int) , o esto causará fugas y todo eso?



El hilo de reddit en esto tiene una explicación de "por qué":

Rust ciertamente podría ser diseñado para hacer esto. Solía ​​hacerlo, de hecho.

Pero debido al modelo de tarea que utiliza Rust, la tarea principal fn podría iniciar un montón de otras tareas y luego salir. Pero una de esas otras tareas puede querer configurar el código de salida del sistema operativo después de que el main se haya ido.

Llamar a set_exit_status es explícito, fácil y no requiere que siempre coloques un 0 en la parte inferior de la página principal cuando de lo contrario no te importa.


Puede establecer el valor de retorno con std::os::set_exit_status .


std::process::exit(code: i32) es la forma de salir con un código.

Rust lo hace de esta manera para que exista una interfaz explícita consistente para devolver un valor desde un programa, desde donde se establezca. Si main inicia una serie de tareas, cualquiera de ellas puede establecer el valor de retorno, incluso si main ha salido.

Rust tiene una forma de escribir una función main que devuelve un valor, sin embargo, normalmente se abstrae dentro de stdlib. Consulte la documentación sobre cómo escribir un ejecutable sin stdlib para obtener más información.