Arasındaki fark nedir `zam "deneme"` ve `özel Durum oluşturmak.new("deneme")`?
Ne fark teknik, felsefi, kavramsal, ya da başka - arasında
raise "foo"
ve
raise Exception.new("foo")
?
CEVAP
Teknik olarak, ilk mesajı "foo"
, ayarlanmış bir RuntimeError yükseltir ve ikinci ileti 7 ** bir özel Durum oluşturur.
Pratikte, eski kullanmak istiyorsanız, ve ikincisi kullanmak istediğinizde arasında önemli bir fark vardır.
Basitçe söylemek gerekirse, muhtemelen Exception
RuntimeError
istiyorum. Bir bağımsız değişken olmadan bir kurtarma blok RuntimeErrors
, yakalayacak ama Exception
s yakalamak DEĞİL. Eğer kodunuzda Exception
yükseltirseniz, bu kod onu yakalamak değil bu yüzden:
begin
rescue
end
Exception
yakalamak için bunu yapmak zorunda olacak:
begin
rescue Exception
end
Bu bir anlamda, Exception
a "daha kötü daha fazla iş onu kurtarmak için yapmak zorunda çünkü. RuntimeError
, bir daha" hata olduğu anlamına gelir
Yani istediğiniz projenizi hata işleme nasıl bağlıdır. Bizim cinleri örneğin, ana döngü RuntimeErrors
rapor ve devam edin yakalayacak olan boş bir kurtarma vardır. Ama içinde bir veya iki şart, istediğimiz daemon için gerçekten ölmek bir hata, ve bu durumda biz zam Exception
, gider doğruca bizim "normal hata işleme Kodu" ve dışarı.
Ve yine, eğer Kütüphanesi kodu, muhtemelen bir RuntimeError
,*, 21*, kullanıcıların kütüphane olacak şaşırdım yükseltir hataları bir boş rescue
blok yakalayamazsınız ve onları bir an için fark neden.
Son olarak, RuntimeError
StandardError
sınıfının bir alt sınıfı olduğunu söylerdim ama gerçek kural 25 ** rağmenherhangi birnesne türü, rescue
boş varsayılan olarak sadece StandardError
devralan bir şey yakalayacak. Her şey özel olmalı.
Arasındaki fark "ekran" ve &...
&Quot arasındaki fark nedir;kelime-bre...
&Quot arasındaki fark nedir CSS;."...
Arasındaki fark nedir "Sınıf.() f...
İçerir " nitelikler;deneme" se...