Juga, definisi kelas, definisi modul dan (menurut saya) do/ endliteral blok membentuk blok pengecualian implisit.
Jörg W Mittag
dapatkah Anda melakukan penyelamatan def memastikan akhir juga?
Mohamed Hafez
Anda benar-benar dapat melakukan penyelamatan def memastikan juga mengakhiri :-)
Antony
dapatkah Anda menggunakan lebih dari satu penyelamatan di def Anda?
menikahjane875
@riedjane875 ya Anda dapat menggunakan beberapa penyelamatan, baik secara eksplisit (setiap klausa penyelamatan / blok pada barisnya sendiri) seperti rescue TypeError; rescue NameError- atau Anda dapat memisahkan koma kelas pengecualian, misalnyarescue TypeError, NameError
chemturion
48
Anda juga dapat menyelamatkan inline:
1+"str"rescue"EXCEPTION!"
akan mencetak "PENGECUALIAN!" karena 'String tidak dapat dipaksa masuk ke Fixnum'
Bagaimana Anda menyelamatkan dan menampilkan pengecualian lacak balik sebaris?
Cyril Duchon-Doris
bagaimana cara mengembalikan pengecualian sebenarnya?
pengguna1735921
1
Penyelamatan inline bukanlah praktik yang baik karena menyelamatkan StandardErrordan semua subkelasnya, seperti NameError- artinya bahkan kesalahan ketik dalam kode Anda tidak akan menimbulkan kesalahan .. Lihat thinkbot.com/blog/don-t-inline-rescue-in- ruby .
BrunoFacca
26
Saya sering menggunakan kombinasi def / penyelamatan dengan validasi ActiveRecord:
def create
@person=Person.new(params[:person])@person.save!
redirect_to @personrescueActiveRecord::RecordInvalid
render :action =>:new
end
begin# something which might raise an exceptionrescueSomeExceptionClass=> some_variable
# code that deals with some exceptionensure# ensure that this code always runsend
Di sini, defsebagai beginpernyataan:
def# something which might raise an exceptionrescueSomeExceptionClass=> some_variable
# code that deals with some exceptionensure# ensure that this code always runsend
Jawaban:
Metode "def" dapat berfungsi sebagai pernyataan "mulai":
sumber
do
/end
literal blok membentuk blok pengecualian implisit.rescue TypeError; rescue NameError
- atau Anda dapat memisahkan koma kelas pengecualian, misalnyarescue TypeError, NameError
Anda juga dapat menyelamatkan inline:
akan mencetak "PENGECUALIAN!" karena 'String tidak dapat dipaksa masuk ke Fixnum'
sumber
StandardError
dan semua subkelasnya, sepertiNameError
- artinya bahkan kesalahan ketik dalam kode Anda tidak akan menimbulkan kesalahan .. Lihat thinkbot.com/blog/don-t-inline-rescue-in- ruby .Saya sering menggunakan kombinasi def / penyelamatan dengan validasi ActiveRecord:
Saya pikir ini adalah kode yang sangat ramping!
sumber
Contoh:
Di sini,
def
sebagaibegin
pernyataan:sumber