SORU
26 Ocak 2011, ÇARŞAMBA


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
26 Ocak 2011, ÇARŞAMBA


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 Exceptions 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ı.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • The White House

    The White Ho

    21 Ocak 2006