Cómo crear un mensaje de salida

208

¿Hay una llamada de función de una línea que salga del programa y muestre un mensaje? Sé que en Perl es tan simple como:

die("Message goes here")

Estoy cansado de escribir esto:

puts "Message goes here"
exit
Chris Bunch
fuente
10
Un pequeño comentario, sus putsescrituras en la salida estándar, mientras que dielas escrituras salida estándar de errores, por lo que: $stderr.puts "Message goes here".
Cdarke
Sé que esto no fue una respuesta, pero respondió mi pregunta, gracias
Patrick
Solo como referencia, en Python lo es sys.exit("Message goes to stderr").
anatoly techtonik

Respuestas:

361

La abortfunción hace esto. Por ejemplo:

abort("Message goes here")

Nota: el abortmensaje se escribirá en STDERRlugar de al putsque se escribirá STDOUT.

Chris Bunch
fuente
66
¡Guauu! Buen hallazgo! Lástima que no solo sobrecargaran la salida con esta funcionalidad ...
Mike Stone
56
Tenga en cuenta que abortar sale del programa con un estado falso que representa un error. salir por defecto sale con un estado de verdadero que representa el éxito. Asegúrese de usar el correcto para la situación.
Alex Spurling
1
re. Comentario de Mike Stone, a veces parece que Ruby fue escrito por un equipo de personas que no tenían comunicación entre ellos, ¿no? (Aún así, es muy fácil programar en él.)
JellicleCat
24

Si desea denotar un error real en su código, puede plantear una RuntimeErrorexcepción:

raise RuntimeError, 'Message goes here'

Esto imprimirá un seguimiento de pila, el tipo de excepción que se genera y el mensaje que proporcionó. Dependiendo de sus usuarios, un seguimiento de pila puede ser demasiado aterrador, y el mensaje real puede perderse en el ruido. Por otro lado, si muere debido a un error real, un seguimiento de pila le dará información adicional para la depuración.

Jörg W Mittag
fuente
24
No necesita mencionar RuntimeError para generar uno (es el tipo predeterminado de excepción planteada), por lo que el siguiente código será suficiente: elevar 'El mensaje va aquí'
sunaku
sunaku: aunque su comentario es perfectamente válido, a menudo descubrí que ser más explícito puede ser útil, en particular para otras personas que leen el código más adelante.
shevy
2

Nunca he oído hablar de tal función, pero sería lo suficientemente trivial como para implementar ...

def die(msg)
  puts msg
  exit
end

Entonces, si esto está definido en algún archivo .rb que incluyes en todos tus scripts, eres dorado ... solo porque no está integrado no significa que no puedas hacerlo tú mismo ;-)

Mike Stone
fuente
3
Resulta que la función 'abortar' lo hace (vea mi respuesta a continuación)
Chris Bunch
1
¿Por qué escribir código cuando la función abortar lo hace por usted?
Gary Haran
2
@ChrisBunch Esto no es lo mismo que la función de cancelación : el valor exitpredeterminado es regresar como si hubiera tenido éxito. abortdevuelve un fallo exit 1devolverá un fallo también.
TemporalWolf
2

Llegué aquí buscando una manera de ejecutar algún código cada vez que finaliza el programa.
Encontré esto :

Kernel.at_exit { puts "sayonara" }
# do whatever
# [...]
# call #exit or #abort or just let the program end
# calling #exit! will skip the call

Llamado varias veces registrará múltiples manejadores.

Giuse
fuente