عبارات rescue المتعددة
جزء من قسم المنطق وتدفق العمليات في رحلة Ruby على Coddy. الدرس 45 من 56.
يمكن أن تحتوي كتلة begin واحدة على عدة بنود rescue. يتحقق Ruby منها من الأعلى إلى الأسفل، وينفّذ أول بند تتطابق فيه فئة الاستثناء.
begin
number = Integer(gets.chomp)
result = 100 / number
puts result
rescue ArgumentError
puts "That's not a valid number."
rescue ZeroDivisionError
puts "Can't divide by zero."
endالترتيب مهم: اذكر الفئات المحددة قبل الفئات العامة. وضع StandardError أولًا سيبتلع كل شيء، ولن تُنفَّذ الفروع اللاحقة أبدًا.
يمكنك أيضًا التقاط عدة أصناف من الاستثناءات في فرع واحد من خلال إدراجها مفصولة بفواصل:
begin
risky_call
rescue ArgumentError, TypeError => e
puts "Bad input: #{e.message}"
endاستخدم هذا عندما يكون رمز الاسترداد نفسه لعدة أوضاع فشل.
التحدي
سهلاقرأ سطرين من الإدخال، وكلاهما يُفترض أن يكون عددًا صحيحًا. استخدم Integer(...) لكليهما، ثم اقسم الأول على الثاني.
تعامل مع ثلاث حالات باستخدام فروع rescue منفصلة:
ArgumentError→ اطبعBad number!ZeroDivisionError→ اطبعCannot divide by zero!TypeError→ اطبعWrong type!
إذا سار كل شيء على ما يرام، اطبع Result: <a / b> (قسمة صحيحة).
بالنسبة إلى الإدخال 10 / 2، يكون الناتج Result: 5. وبالنسبة إلى 10 / 0، يكون الناتج Cannot divide by zero!. وبالنسبة إلى 10 / abc، يكون الناتج Bad number!.
جرّب بنفسك
raw_a = gets.chomp
raw_b = gets.chomp
# TODO: begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... end
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق العمليات
1السلاسل النصية بعمق
نظرة عامة على أساليب السلاسل النصيةاستيفاء السلاسل النصيةالتكرار عبر السلاسل النصيةالتقسيم والضممراجعة - ناسج السلاسل النصية4Blocks، Procs و Lambdas
ما هي الكتلة؟do..end مقابل الأقواس المعقوفةالكلمة المفتاحية yieldمعاملات الكتلةProcs و Lambdasمراجعة - مكرّر مخصّص7Hashes - الجزء الثاني
Hash.new مع القيم الافتراضيةالتكرار عبر HashesHashes متداخلةالدمج والتحويلمراجعة - عدّاد التكرار10مشروع - سجلات الطلاب
نظرة عامة على المشروعإضافة طالب5قوة Enumerable
Select و Rejectتسلسل MapReduce / Injectcount، all?، any?، none?group_by و partitionsort_by، min_by، max_byمراجعة - خط أنابيب البيانات3المصفوفات ثنائية الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالتكرار عبر المصفوفات ثنائية الأبعادالأنماط الشائعة للمصفوفات ثنائية الأبعادمراجعة - عمليات المصفوفات6المشروع - مدير المكتبة
نظرة عامة على المشروعإضافة كتاب9معالجة الأخطاء
ما هو الاستثناء؟begin / rescueعبارات rescue المتعددةensure و raiseمراجعة - آلة حاسبة آمنةتدرّب بنفسك: مترجم Ruby عبر الإنترنت