SORU
6 NİSAN 2012, Cuma


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
6 NİSAN 2012, Cuma


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 evals 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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Barnacules Nerdgasm

    Barnacules N

    20 Temmuz 2006
  • ChasesAndCrashes

    ChasesAndCra

    31 Temmuz 2009
  • Tek Syndicate

    Tek Syndicat

    23 Temmuz 2008