ensure ve raise
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 46 / 56.
Hata işleme araç setini iki parça daha tamamlar.
ensure, ne olursa olsun çalışan bir bloktur; begin normal şekilde tamamlanmış, bir rescue dalı bir istisnayı yakalamış veya istisna yakalanmamış olsa bile çalışır. Temizleme kodunu buraya koyarsınız:
begin
puts "opening file"
raise "something broke"
rescue
puts "caught it"
ensure
puts "closing file"
end
# dosya açılıyor
# yakalandı
# dosya kapatılıyorraise, kendi istisnanızı oluşturmanın yoludur. Mesaj için bir dize veya bir sınıf ile birlikte bir mesaj geçirin:
def withdraw(amount)
raise ArgumentError, "amount must be positive" if amount <= 0
# ... para çekimini yap
endBir kural olarak, bağımsız değişkenler yanlış olduğunda hızlıca başarısız olmak için yöntemin en başında raise kullanılır. Çağıran tarafın mantıklı bir kurtarma yöntemi varsa rescue kullanabilir veya hatanın üst katmanlara iletilmesine izin verebilir.
Görev
KolayŞunları yapan bir safe_divide(a, b) yöntemi tanımlayın:
b == 0ise,"b cannot be zero"mesajıylaArgumentErroroluşturur- Aksi takdirde
a / bdeğerini döndürür
Ardından girdiden iki tam sayı okuyun. safe_divide çağrısını begin / rescue / ensure içinde yapın:
- Başarılı olursa
Result: <value>yazdırın ArgumentErrordurumundaError: <message>yazdırınensureiçinde her zamanDone.yazdırın
10 / 2 girdisi için çıktı şöyledir:
Result: 5
Done.10 / 0 girdisi için:
Error: b cannot be zero
Done.Kendin dene
# TODO: safe_divide(a, b) tanımla, b == 0 olduğunda ArgumentError fırlatır
a = gets.to_i
b = gets.to_i
# TODO: begin ... Result yazdır; rescue ArgumentError => e ... Error yazdır; ensure ... Done yazdır.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Dizeler Detaylı İnceleme
Dize Metotlarına Genel BakışDize EnterpolasyonuDizeler Üzerinde YinelemeBölme ve BirleştirmeTekrar - Dize Dokuyucu4Bloklar, Proc'lar ve Lambda'lar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar SözcüğüBlok ParametreleriProc'lar ve Lambda'larÖzet - Özel Yineleyici7Hash'ler 2. Bölüm
Varsayılanlarla Hash.newHash'ler Üzerinde Yinelemeİç İçe Hash'lerBirleştirme ve DönüştürmeTekrar - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Seçme ve ReddetmeMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byTekrar - Veri Hattı32B Diziler
2B Dizi Temelleri2B Elemanlara Erişim2B Diziler Üzerinde YinelemeYaygın 2B ÖrüntülerTekrar - Matris İşlemleri6Proje - Kütüphane Yöneticisi
Projeye Genel BakışKitap Ekle9Hata Yönetimi
İstisna nedir?begin / rescueBirden Çok rescue Yan Yönergesiensure ve raiseTekrar - Güvenli Hesap MakinesiKendi başına pratik yap: Online Ruby derleyicisi