semejanzas provocado legalizar legalización legalidad legal interrupcion inducido espontaneo entre embarazo diferencias diferencia despenalizar despenalización despenalizacion cual cuadro consecuencias comparativo aborto ruby exit

ruby - provocado - ¿Cuál es la diferencia entre salir y abortar?



diferencia entre legalización y despenalización del aborto (1)

Salga, salga! ¡Anule, levante ... ¡Sáquenme de aquí! " Describe todo lo que querría saber, creo.

En breve:

  • Kernel.exit(code) "sale" de la secuencia de comandos de inmediato y devuelve el code al sistema operativo. Sin embargo, justo antes de hacerlo, llama a cualquier controlador at_exit registrado que su código podría haber registrado.
  • Kernel.exit!(code) hace lo mismo, pero sale inmediatamente, no se llama at_exit handlers.
  • Kernel.abort(message) toma un message que se imprimirá en STDERR justo antes de salir con un código de falla = 1.

Los diferentes valores de los códigos de salida son apenas adecuados para detectar problemas y depurar el código. Sin embargo, son muy fáciles de usar y hacer que el proceso padre los lea es casi trivial. Por lo tanto, exit y exit! .

Si puede pasar más tiempo y hacer que la comprobación de errores sea más robusta, necesitará algunos mensajes de error graves, no solo códigos. Tradicionalmente, puede imprimirlos a STDERR si existe. Puede imprimir manualmente a STDERR a través de las entradas normales, pero los códigos de salida se seguirán utilizando en el nivel más bajo.

Imprimir en STDERR no marca su trabajo automáticamente como fallido, por lo tanto, la abort se creó para permitirle escribir y salir fácilmente. Un código de salida predeterminado de 1 es suficiente para marcar la condición de FALLA, ya que se asume que toda la información contextual real se incluirá en los mensajes de error proporcionados por usted.

También tenga en cuenta que cualquier excepción no manejada, como raise "wtf" sin rescue cualquier lugar, se comporta como si llamara a Kernel.abort : se imprimen en STDERR y usan exitcode=1 .

Dijiste exit(false) pero la Kernel.exit!(code) La documentación dice que el parámetro es el status code que se utilizará.

Acabo de comprobarlo en Windows y Ruby 1.9.3:

exit 0 # quits with code: 0 exit 1 # quits with code: 1 exit false # quits with code: 1 exit true # quits with code: 0

lo que realmente me sorprende, ya que asumo que false sería forzado a 0 en la forma tradicional de C. Entonces, tal vez deberías estar usando números enteros como 0 o 1 para tener perfectamente claro qué código se usará.

La documentación de abort dice que abort

Finalice la ejecución inmediatamente, de forma efectiva llamando a Kernel.exit (falso).

¿Qué significa exactamente "inmediatamente"? ¿Cuál es la diferencia entre abort y exit con estado no true ?