Cara membuat pesan keluar

208

Apakah ada panggilan fungsi satu saluran yang keluar dari program dan menampilkan pesan? Saya tahu di Perl itu sesederhana:

die("Message goes here")

Saya lelah mengetik ini:

puts "Message goes here"
exit
Chris Bunch
sumber
10
Sebuah komentar kecil, Anda putsmenulis ke stdout, sedangkan diemenulis ke stderr, sehingga: $stderr.puts "Message goes here".
cdarke
Saya tahu ini bukan jawaban, tapi itu menjawab pertanyaan saya, terima kasih
Patrick
Hanya untuk referensi, dengan Python sys.exit("Message goes to stderr").
anatoly techtonik

Jawaban:

361

The abortfungsi melakukan hal ini. Sebagai contoh:

abort("Message goes here")

Catatan: abortpesan akan ditulis STDERRsebagai kebalikan dari putsyang akan ditulis STDOUT.

Chris Bunch
sumber
6
Wow! Temuan yang bagus! Sayang sekali mereka tidak hanya membebani keluar dengan fungsi ini ....
Mike Stone
56
Catatan, batalkan keluar dari program dengan status false yang mewakili kegagalan. keluar secara default keluar dengan status true yang mewakili kesuksesan. Pastikan Anda menggunakan yang tepat untuk situasi tersebut.
Alex Spurling
1
kembali. Komentar Mike Stone, kadang-kadang tampak seolah-olah Ruby ditulis oleh tim orang yang tidak berkomunikasi satu sama lain, bukan? (Tetap saja, sangat mudah diprogram di dalamnya.)
JellicleCat
24

Jika Anda ingin menunjukkan kesalahan aktual dalam kode Anda, Anda dapat mengajukan RuntimeErrorpengecualian:

raise RuntimeError, 'Message goes here'

Ini akan mencetak stacktrace, jenis pengecualian yang diangkat dan pesan yang Anda berikan. Bergantung pada pengguna Anda, stacktrace mungkin terlalu menakutkan, dan pesan yang sebenarnya mungkin hilang dalam kebisingan. Di sisi lain, jika Anda mati karena kesalahan aktual, stacktrace akan memberi Anda informasi tambahan untuk debugging.

Jörg W Mittag
sumber
24
Anda tidak perlu menyebutkan RuntimeError untuk menaikkan satu (itu jenis pengecualian standar yang dimunculkan) sehingga kode berikut ini sudah cukup: meningkatkan 'Pesan di sini'
sunaku
sunaku - sementara komentar Anda benar-benar valid, saya sering menemukan bahwa menjadi lebih eksplisit dapat bermanfaat, khususnya bagi orang lain yang membaca kode nanti.
shevy
2

Saya belum pernah mendengar fungsi seperti itu, tetapi itu akan cukup sepele untuk diimplementasikan ...

def die(msg)
  puts msg
  exit
end

Kemudian, jika ini didefinisikan dalam beberapa file .rb yang Anda sertakan dalam semua skrip Anda, Anda berwarna emas .... hanya karena itu bukan bawaan tidak berarti Anda tidak dapat melakukannya sendiri ;-)

Mike Stone
sumber
3
Ternyata fungsi 'batal' melakukannya (lihat jawaban saya di bawah)
Chris Bunch
1
Mengapa menulis kode ketika fungsi batal melakukannya untuk Anda?
Gary Haran
2
@ ChrisBunch Ini tidak sama dengan fungsi batal : exitdefault untuk kembali seolah-olah telah berhasil. abortmengembalikan kegagalan. exit 1akan mengembalikan kegagalan juga.
TemporalWolf
2

Saya sampai di sini mencari cara untuk mengeksekusi beberapa kode setiap kali program berakhir.
Menemukan ini :

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

Dipanggil beberapa kali akan mendaftarkan banyak penangan.

Giuse
sumber