Neden Ruby Hariç => e `kurtarmak için kötü tarzı mı?
Ryan Davis Ruby QuickRef diyor (açıklama yapmadan):
Özel Durum kurtarma yok. HİÇ. yoksa seni bıçaklarım.
Neden olmasın? Yapılacak en doğru şey nedir?
CEVAP
Exception
6 ** seni kurtarmak çok Ruby'nin istisna hiyerarşisi, köküdürher şeyi, SyntaxError
, LoadError
Interrupt
gibi alt sınıflar da dahil olmak üzere.
Interrupt
tahlisiye kullanarak kullanıcı engellerCTRLCprogramdan çıkmak için.
SignalException
tahlisiye doğru sinyallere yanıt programı engeller. Hariç kill -9
tarafından öldürülemez.
SyntaxError
kurtarma başarısız eval
s sessizce bunu yapmak anlamına gelir.
Bütün bunlar bu programı çalıştıran ve deneyerek gösterilebilirCTRLCveya kill
:
loop do
begin
sleep 1
eval "djsakru3924r9eiuorwju3498 = 5u84fior8u8t4ruyf8ihiure"
rescue Exception
puts "I refuse to fail or be stopped!"
end
end
Exception
tahlisiye bile varsayılan değil. Yapıyor
begin
# iceberg!
rescue
# lifeboats
end
Exception
, değil kurtarma StandardError
onu kurtarır. Genellikle bir varsayılan StandardError
ama Exception
kurtarılmayı bekleyen daha spesifik belirtmek gerekirgenişletiyorkapsam yerine daralma ve geri dönülemez sonuçları olabilir ve hata bulma çok zor olduğunu gösteriyor.
Eğer StandardError
kurtarma istersiniz dışında bir değişken gereken bir durum varsa, bu formu kullanabilirsiniz:
begin
# iceberg!
rescue => e
# lifeboats
end
eşdeğerdir:
begin
# iceberg!
rescue StandardError => e
# lifeboats
end
Aklı başında Exception
kurtarmak için bir kaç yaygın durumlardan biri günlüğü/bu durumda hemen yeniden yükseltmek gerekir amaçları, raporlama için özel durum:
begin
# iceberg?
rescue Exception => e
# do some logging
raise e # not enough lifeboats ;)
end
Neden&; dizi yineleme için... "* o kad...
Neden yerine HTML JSON oluşturulan dön...
Neden Sistem çağrısı için kötü bir uyg...
Neden performans için iç içe ağırlıkla...
Neden koddan bir eventhandler aramak i...