الفرق بين المراجعتين لصفحة: «Ruby/Exception»
لا ملخص تعديل |
طلا ملخص تعديل |
||
سطر 89: | سطر 89: | ||
يُعيد التّابع <code>cause</code> الاستثناء السابق (!$) عندما يُرمى هذا الاستثناء. | يُعيد التّابع <code>cause</code> الاستثناء السابق (!$) عندما يُرمى هذا الاستثناء. | ||
=== <code>exception</code> === | === [[Ruby/Exception/exception|<code>exception</code>]] === | ||
يُعيد التّابع <code>exception</code> المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى <code>[[Ruby/String/to str|string.to_str]]</code>. | يُعيد التّابع <code>exception</code> المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى <code>[[Ruby/String/to str|string.to_str]]</code>. | ||
مراجعة 18:57، 10 أكتوبر 2018
تُستخدَم الكائنات السليلة من الصنف Exception
للتواصل بين التّابع Kernel.raise
وتصريحات rescue
في الكتل (blocks) من الشكل begin ... end. تَحمل كائنات الصنف Exception
معلوماتٍ عن الاستثناء المَرمي – نوعه (اسم صنف الاستثناء)، وسلسلةً نصيّةً وصفيّةً اختياريّة، ومعلوماتِ تتبّعٍ اختيارية. قد تضيف الأصناف الفرعية من الصنف Exception
معلوماتٍ إضافيّةٍ مثل NameError.name
.
قد تُنشِئ البرامج أصنافًا فرعيّةً (subclasses) من الصنف Exception
، تكون عادةً StandardError
أو RuntimeError
، لتوفير أصنافٍ مخصصّةٍ وإضافة معلوماتٍ إضافية. ألقِ نظرةً على قائمة الأصناف الفرعية في الأسفل من أجل قيم raise
و rescue
الافتراضية .
عندما يُرمى استثناءٌ ولكن لم يُتعامل معه بعد (في الكتل rescue، و ensure، و at_exit، و END)، يحتوي المتغيّر العام $!
على الاستثناء الحالي، بينما يحتوي $@
على مصفوفة التتبع المعاكس (backtrace) للاستثناء الحالي.
يُستحسن أن تمتلك المكتبة صنفًا فرعيًّا واحدًا إما StandardError
أو RuntimeError
وأن تمتلك أنواع استثناءات محددة ترث منه . هذا يسمح للمستخدم بإنقاذ الاستثناء ذي النوع العام (generic exception) وبالتالي إمساك (catch) كل الاستثناءات التي قد ترميها المكتبة حتى إذا أضافت الإصدارات المستقبلية للمكتبة أصنافًا فرعيّةً جديدةً للصنف Exception
.
ألقٍ نظرة على المثال التالي:
class MyLibrary
class Error < RuntimeError
end
class WidgetError < Error
end
class FrobError < Error
end
end
للتعامل مع الصنفين الفرعيِّين WidgetError
وFrobError
يمكن لمستخدم المكتبة تنفيذ rescue
على MyLibrary::Error
.
الأصناف الفرعيّة المضمّنة في الصنف Exception
هي:
- NoMemoryError
- ScriptError
- LoadError
- NotImplementedError
- SyntaxError
- SecurityError
- SignalException
- Interrupt
- StandardError – default for rescue
- ArgumentError
- UncaughtThrowError
- EncodingError
- FiberError
- IOError
- EOFError
- IndexError
- KeyError
- StopIteration
- LocalJumpError
- NameError
- NoMethodError
- RangeError
- FloatDomainError
- RegexpError
- RuntimeError – default for raise
- FrozenError
- SystemCallError
- Errno::*
- ThreadError
- TypeError
- ZeroDivisionError
- ArgumentError
- SystemExit
- SystemStackError
- fatal – impossible to rescue
توابع الصنف العامة (Public Class Methods)
exception
يُعيد التّابع exception
المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى string.to_str
.
new
يُنشئ التّابع new
كائنًا جديدًا من النّوع Exception
، ويمرِّر رسالةً اختياريًّا إليه.
?to_tty
يتحقّق التّابع ?to_tty
فيما إذا كانت رسائل الاستثناء ستُرسل إلى الطرفية tty
.
توابع الكائن العامة (Public Instance Methods)
==
يتحقق المعامل ==
من تساوي كائني استثناء مع بعضهما بعضًا.
backtrace
يُعيد التّابع backtrace
أيَّ تتبّعٍ عكسيٍّ (backtrace) مرتبطٍ بالاستثناء.
backtrace_locations
يُعيد التّابع backtrace_locations
أي تتبع عكسي (backtrace) مرتبط بالاستثناء. هذا التّابع شبيه للتّابع backtrace
، ولكن backtrace
هو مصفوفة من Thread::Backtrace::Location
.
cause
يُعيد التّابع cause
الاستثناء السابق (!$) عندما يُرمى هذا الاستثناء.
exception
يُعيد التّابع exception
المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى string.to_str
.
full_message
يُعيد التّابع full_message
سلسلةً نصيةً منسّقةً من الاستثناء.
inspect
يُعيد التّابع inspect
اسم صنف الاستثناء ورسالته.
message
يُعيد التّابع message
ناتج استدعاء التّابع exception.to_s
. ويُعيد هذا عادةً رسالة الاستثناء أو اسمه.
set_backtrace
يضبط التّابع set_backtrace
معلومات المصفوفة backtrace
الخاصة بكائن الاستثناء.
to_s
يُعيد التّابع to_s
رسالة الاستثناء (أو اسم الاستثناء إذا لم يتم تعيين أي رسالة).