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

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.


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.


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 ;-)


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.