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?
Como han señalado otros, std::process::exit(code: i32)
es el camino a seguir aquí
Más información acerca de por qué se proporciona en RFC 1011: Salida de proceso . La discusión sobre el RFC se encuentra en la solicitud de extracción del RFC .
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.