Como criar uma mensagem de saída

208

Existe uma chamada de função em uma linha que sai do programa e exibe uma mensagem? Eu sei que no Perl é tão simples quanto:

die("Message goes here")

Estou cansado de digitar isso:

puts "Message goes here"
exit
Chris Bunch
fonte
10
Um pequeno comentário, suas putsgravações para stdout, enquanto dieescreve para stderr, então: $stderr.puts "Message goes here".
cdarke
Eu sei que esta não era uma resposta, mas respondeu à minha pergunta, graças
Patrick
Apenas para referência, em Python é sys.exit("Message goes to stderr").
techtonik anatoly

Respostas:

361

A abortfunção faz isso. Por exemplo:

abort("Message goes here")

Nota: a abortmensagem será gravada em STDERRoposição à putsqual será gravada STDOUT.

Chris Bunch
fonte
6
Uau! Bom achado! Pena que eles não apenas sobrecarregaram a saída com essa funcionalidade ... #
Mike Stone
56
Observe que abortar sai do programa com um status false que representa uma falha. exit por padrão sai com um status true que representa sucesso. Certifique-se de usar o caminho certo para a situação.
precisa
1
ré. No comentário de Mike Stone, às vezes parece que Ruby foi escrito por uma equipe de pessoas que não tinham comunicação entre si, não é? (Ainda assim, é tão fácil de programa nele.)
JellicleCat
24

Se você deseja denotar um erro real no seu código, pode gerar uma RuntimeErrorexceção:

raise RuntimeError, 'Message goes here'

Isso imprimirá um rastreamento de pilha, o tipo de exceção que está sendo gerada e a mensagem que você forneceu. Dependendo dos usuários, um rastreamento de pilha pode ser muito assustador e a mensagem real pode se perder no barulho. Por outro lado, se você morrer devido a um erro real, um rastreamento de pilha fornecerá informações adicionais para depuração.

Jörg W Mittag
fonte
24
Você não precisa mencionar o RuntimeError para gerar uma (é o tipo padrão de exceção gerada), portanto o código a seguir será suficiente: raise 'Message goes here'
sunaku 17/03/10
sunaku - enquanto seu comentário é perfeitamente válido, muitas vezes descobri que ser mais explícito pode ser útil, principalmente para outras pessoas que leem o código posteriormente.
precisa saber é
2

Nunca ouvi falar dessa função, mas seria trivial o suficiente para implementar ...

def die(msg)
  puts msg
  exit
end

Então, se isso está definido em algum arquivo .rb que você inclui em todos os seus scripts, você é ouro ... só porque não está embutido não significa que você não pode fazer isso sozinho ;-)

Mike Stone
fonte
3
Acontece que o 'aborto' função faz isso (ver minha resposta abaixo)
Chris Bunch
1
Por que escrever código quando a função abortar faz isso por você?
Gary Haran
2
@ChrisBunch Esta é não o mesmo que a função abort: exitpadrões para retornar como se foi bem sucedida. abortretorna uma falha. exit 1retornará uma falha também.
TemporalWolf
2

Cheguei aqui procurando uma maneira de executar algum código sempre que o programa termina.
Encontrou isto :

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

Chamado várias vezes registrará vários manipuladores.

Giuse
fonte