الفرق بين المراجعتين لصفحة: «Ruby/Exception»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) طلا ملخص تعديل |
||
(5 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة) | |||
سطر 1: | سطر 1: | ||
{{DISPLAYTITLE:الصنف <code>Exception</code> في روبي}} | {{DISPLAYTITLE:الصنف <code>Exception</code> في روبي}} | ||
تُستخدَم الكائنات السليلة من الصنف <code>Exception</code> للتواصل بين التّابع <code>Kernel.raise</code> وتصريحات <code>rescue</code> في الكتل (blocks) من الشكل begin ... end. تَحمل كائنات الصنف <code>Exception</code> معلوماتٍ عن الاستثناء المَرمي | تُستخدَم الكائنات السليلة من الصنف <code>Exception</code> للتواصل بين التّابع <code>[[Ruby/Kernel/raise|Kernel.raise]]</code> وتصريحات <code>rescue</code> في الكتل (blocks) من الشكل <code>[[Ruby/miscellaneous#BEGIN .D9.88 END|begin...end]]</code>. تَحمل كائنات الصنف <code>Exception</code> معلوماتٍ عن الاستثناء المَرمي مثل نوعه (اسم صنف الاستثناء)، وسلسلةً نصيّةً وصفيّةً اختياريّة، ومعلوماتِ تتبّعٍ اختيارية. قد تضيف الأصناف الفرعية من الصنف <code>Exception</code> معلوماتٍ إضافيّةٍ مثل <code>[[Ruby/NameError/name|NameError.name]]</code>. | ||
قد تُنشِئ البرامج أصنافًا فرعيّةً (subclasses) من الصنف <code>Exception</code>، تكون عادةً <code>StandardError</code> أو <code>RuntimeError</code>، لتوفير أصنافٍ مخصصّةٍ وإضافة معلوماتٍ إضافية. ألقِ نظرةً على قائمة الأصناف الفرعية في الأسفل من أجل قيم <code>raise</code> و <code>rescue</code> الافتراضية . | قد تُنشِئ البرامج أصنافًا فرعيّةً (subclasses) من الصنف <code>Exception</code>، تكون عادةً <code>StandardError</code> أو <code>RuntimeError</code>، لتوفير أصنافٍ مخصصّةٍ وإضافة معلوماتٍ إضافية. ألقِ نظرةً على قائمة الأصناف الفرعية في الأسفل من أجل قيم <code>raise</code> و <code>rescue</code> الافتراضية . | ||
عندما يُرمى استثناءٌ ولكن لم يُتعامل معه بعد (في الكتل | عندما يُرمى استثناءٌ ولكن لم يُتعامل معه بعد (في الكتل <code>rescue</code>، و <code>ensure</code>، و <code>at_exit</code>، و <code>END</code>)، يحتوي المتغيّر العام <code>$!</code> على الاستثناء الحالي، بينما يحتوي <code>$@</code>على مصفوفة التتبع المعاكس (backtrace) للاستثناء الحالي. | ||
يُستحسن أن تمتلك المكتبة صنفًا فرعيًّا واحدًا إما <code>StandardError</code> أو <code>RuntimeError</code> وأن تمتلك أنواع استثناءات محددة ترث منه . هذا يسمح للمستخدم بإنقاذ الاستثناء ذي النوع العام (generic exception) وبالتالي إمساك (catch) كل الاستثناءات التي قد ترميها المكتبة حتى إذا أضافت الإصدارات المستقبلية للمكتبة أصنافًا فرعيّةً جديدةً للصنف <code>Exception</code>. | يُستحسن أن تمتلك المكتبة صنفًا فرعيًّا واحدًا إما <code>StandardError</code> أو <code>RuntimeError</code> وأن تمتلك أنواع استثناءات محددة ترث منه . هذا يسمح للمستخدم بإنقاذ الاستثناء ذي النوع العام (generic exception) وبالتالي إمساك (catch) كل الاستثناءات التي قد ترميها المكتبة حتى إذا أضافت الإصدارات المستقبلية للمكتبة أصنافًا فرعيّةً جديدةً للصنف <code>Exception</code>. | ||
سطر 10: | سطر 10: | ||
ألقٍ نظرة على المثال التالي:<syntaxhighlight lang="ruby"> | ألقٍ نظرة على المثال التالي:<syntaxhighlight lang="ruby"> | ||
class MyLibrary | class MyLibrary | ||
class Error < RuntimeError | |||
end | |||
class WidgetError < Error | |||
end | |||
class FrobError < Error | |||
end | |||
end | end | ||
</syntaxhighlight>للتعامل مع الصنفين الفرعيِّين <code>WidgetError</code> <code> | </syntaxhighlight>للتعامل مع الصنفين الفرعيِّين <code>WidgetError</code> و <code>FrobError</code> يمكن لمستخدم المكتبة تنفيذ <code>rescue</code> على <code>MyLibrary::Error</code>. | ||
الأصناف الفرعيّة المضمّنة في الصنف <code>Exception</code> هي: | الأصناف الفرعيّة المضمّنة في الصنف <code>Exception</code> هي: | ||
* NoMemoryError | * <code>NoMemoryError</code> | ||
* ScriptError | * <code>ScriptError</code> | ||
** LoadError | ** <code>LoadError</code> | ||
** NotImplementedError | ** <code>NotImplementedError</code> | ||
** SyntaxError | ** <code>SyntaxError</code> | ||
* SecurityError | * <code>SecurityError</code> | ||
* SignalException | * <code>SignalException</code> | ||
** Interrupt | ** <code>Interrupt</code> | ||
* StandardError – default for rescue | * <code>StandardError – default for rescue</code> | ||
** ArgumentError | ** <code>ArgumentError</code> | ||
*** UncaughtThrowError | *** <code>UncaughtThrowError</code> | ||
** EncodingError | ** <code>EncodingError</code> | ||
** FiberError | ** <code>FiberError</code> | ||
** IOError | ** <code>IOError</code> | ||
*** EOFError | *** <code>EOFError</code> | ||
** IndexError | ** <code>IndexError</code> | ||
*** KeyError | *** <code>KeyError</code> | ||
*** StopIteration | *** <code>StopIteration</code> | ||
** LocalJumpError | ** <code>LocalJumpError</code> | ||
** NameError | ** <code>NameError</code> | ||
*** NoMethodError | *** <code>NoMethodError</code> | ||
** RangeError | ** <code>RangeError</code> | ||
*** FloatDomainError | *** <code>FloatDomainError</code> | ||
** RegexpError | ** <code>RegexpError</code> | ||
** RuntimeError – default for raise | ** <code>RuntimeError – default for raise</code> | ||
*** FrozenError | *** <code>FrozenError</code> | ||
** SystemCallError | ** <code>SystemCallError</code> | ||
*** Errno::* | *** <code>Errno::*</code> | ||
** ThreadError | ** <code>ThreadError</code> | ||
** TypeError | ** <code>TypeError</code> | ||
** ZeroDivisionError | ** <code>ZeroDivisionError</code> | ||
* SystemExit | * <code>SystemExit</code> | ||
* SystemStackError | * <code>SystemStackError</code> | ||
* fatal – impossible to rescue | * <code>fatal – impossible to rescue</code> | ||
== توابع الصنف العامة (Public Class Methods) == | == توابع الصنف العامة (Public Class Methods) == | ||
=== <code>[[Ruby/Exception/exception|exception]]</code> === | === <code>[[Ruby/Exception/exception|exception]]</code> === | ||
يُعيد | يُعيد المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى <code>[[Ruby/String/to str|string.to_str]]</code>. | ||
=== <code>[[Ruby/Exception/new|new]]</code> === | === <code>[[Ruby/Exception/new|new]]</code> === | ||
يُنشئ | يُنشئ كائنًا جديدًا من النّوع <code>Exception</code>، ويمرِّر رسالةً اختياريًّا إليه. | ||
=== <code>[[Ruby/Exception/to tty-3F|?to_tty]]</code> === | === <code>[[Ruby/Exception/to tty-3F|?to_tty]]</code> === | ||
يتحقّق | يتحقّق فيما إذا كانت رسائل الاستثناء ستُرسل إلى الطرفية <code>tty</code>. | ||
== توابع الكائن العامة (Public Instance Methods) == | == توابع الكائن العامة (Public Instance Methods) == | ||
=== | === [[Ruby/Exception/3D-3D|<code rel="mw:WikiLink" title="Ruby/Exception/3D-3D" href="Ruby/Exception/3D-3D">==</code>]] === | ||
يتحقق من تساوي كائني استثناء مع بعضهما بعضًا. | |||
=== <code>[[Ruby/Exception/backtrace|backtrace]]</code> === | === <code>[[Ruby/Exception/backtrace|backtrace]]</code> === | ||
يُعيد | يُعيد أيَّ تتبّعٍ عكسيٍّ (backtrace) مرتبطٍ بالاستثناء. | ||
=== <code>[[Ruby/Exception/backtrace locations|backtrace_locations]]</code> === | === <code>[[Ruby/Exception/backtrace locations|backtrace_locations]]</code> === | ||
يُعيد | يُعيد أي تتبع عكسي (backtrace) مرتبط بالاستثناء. هذا التّابع شبيه للتّابع <code>backtrace</code>، ولكن <code>backtrace</code> هو مصفوفة من <code>Thread::Backtrace::Location</code>. | ||
=== <code>[[Ruby/Exception/cause|cause]]</code> === | === <code>[[Ruby/Exception/cause|cause]]</code> === | ||
يُعيد | يُعيد الاستثناء السابق (!$) عندما يُرمى هذا الاستثناء. | ||
=== <code>exception</code> === | === [[Ruby/Exception/exception|<code>exception</code>]] === | ||
يُعيد | يُعيد المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى <code>[[Ruby/String/to str|string.to_str]]</code>. | ||
=== <code>[[Ruby/Exception/full message|full_message]]</code> === | === <code>[[Ruby/Exception/full message|full_message]]</code> === | ||
يُعيد | يُعيد سلسلةً نصيةً منسّقةً من الاستثناء. | ||
=== <code>[[Ruby/Exception/inspect|inspect]]</code> === | === <code>[[Ruby/Exception/inspect|inspect]]</code> === | ||
يُعيد | يُعيد اسم صنف الاستثناء ورسالته. | ||
=== <code>[[Ruby/Exception/message|message]]</code> === | === <code>[[Ruby/Exception/message|message]]</code> === | ||
يُعيد | يُعيد ناتج استدعاء التّابع <code>[[Ruby/Exception/to s|exception.to_s]]</code>. ويُعيد هذا عادةً رسالة الاستثناء أو اسمه. | ||
=== <code>[[Ruby/Exception/set backtrace|set_backtrace]]</code> === | === <code>[[Ruby/Exception/set backtrace|set_backtrace]]</code> === | ||
يضبط | يضبط معلومات المصفوفة <code>backtrace</code> الخاصة بكائن الاستثناء. | ||
=== <code>[[Ruby/Exception/to s|to_s]]</code> === | === <code>[[Ruby/Exception/to s|to_s]]</code> === | ||
يُعيد | يُعيد رسالة الاستثناء (أو اسم الاستثناء إذا لم يتم تعيين أي رسالة). | ||
== مصادر == | == مصادر == |
المراجعة الحالية بتاريخ 13:04، 21 نوفمبر 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
SystemExit
SystemStackError
fatal – impossible to rescue
توابع الصنف العامة (Public Class Methods)
exception
يُعيد المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى string.to_str
.
new
يُنشئ كائنًا جديدًا من النّوع Exception
، ويمرِّر رسالةً اختياريًّا إليه.
?to_tty
يتحقّق فيما إذا كانت رسائل الاستثناء ستُرسل إلى الطرفية tty
.
توابع الكائن العامة (Public Instance Methods)
==
يتحقق من تساوي كائني استثناء مع بعضهما بعضًا.
backtrace
يُعيد أيَّ تتبّعٍ عكسيٍّ (backtrace) مرتبطٍ بالاستثناء.
backtrace_locations
يُعيد أي تتبع عكسي (backtrace) مرتبط بالاستثناء. هذا التّابع شبيه للتّابع backtrace
، ولكن backtrace
هو مصفوفة من Thread::Backtrace::Location
.
cause
يُعيد الاستثناء السابق (!$) عندما يُرمى هذا الاستثناء.
exception
يُعيد المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى string.to_str
.
full_message
يُعيد سلسلةً نصيةً منسّقةً من الاستثناء.
inspect
يُعيد اسم صنف الاستثناء ورسالته.
message
يُعيد ناتج استدعاء التّابع exception.to_s
. ويُعيد هذا عادةً رسالة الاستثناء أو اسمه.
set_backtrace
يضبط معلومات المصفوفة backtrace
الخاصة بكائن الاستثناء.
to_s
يُعيد رسالة الاستثناء (أو اسم الاستثناء إذا لم يتم تعيين أي رسالة).