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.
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 ;-)
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.
puts
menulis ke stdout, sedangkandie
menulis ke stderr, sehingga:$stderr.puts "Message goes here"
.sys.exit("Message goes to stderr")
.Jawaban:
The
abort
fungsi melakukan hal ini. Sebagai contoh:Catatan:
abort
pesan akan ditulisSTDERR
sebagai kebalikan dariputs
yang akan ditulisSTDOUT
.sumber
Jika Anda ingin menunjukkan kesalahan aktual dalam kode Anda, Anda dapat mengajukan
RuntimeError
pengecualian: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.
sumber
Saya belum pernah mendengar fungsi seperti itu, tetapi itu akan cukup sepele untuk diimplementasikan ...
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 ;-)
sumber
exit
default untuk kembali seolah-olah telah berhasil.abort
mengembalikan kegagalan.exit 1
akan mengembalikan kegagalan juga.Saya sampai di sini mencari cara untuk mengeksekusi beberapa kode setiap kali program berakhir.
Menemukan ini :
Dipanggil beberapa kali akan mendaftarkan banyak penangan.
sumber