الفرق بين المراجعتين لصفحة: «Ruby/Thread/report on exception»

من موسوعة حسوب
< Ruby‏ | Thread
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>report_on_exception‎</code> الخاص بالصنف <code>Thread</code> في روبي}}</noinclude> تصنيف: Ruby...'
 
ط مراجعة وتدقيق.
 
(مراجعتان متوسطتان بواسطة مستخدم واحد آخر غير معروضتين)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: التابع <code>report_on_exception‎</code> الخاص بالصنف <code>Thread</code> في روبي}}</noinclude>
<noinclude>{{DISPLAYTITLE: التابع <code>Thread.report_on_exception‎</code> في روبي}}</noinclude>
[[تصنيف: Ruby]]
[[تصنيف: Ruby]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Thread]]
[[تصنيف: Ruby Thread]]
يعيد التابع <code>report_on_exception</code> حالة "report on exception".
يعيد التابع <code>report_on_exception</code> حالة "التبليغ عند الاستثناء" (report on exception). القيمة الافتراضية هي <code>true</code> منذ روبي 2.5.


القيمة الافتراضية هي <code>true</code> منذ روبي 2.5.
كل [[Ruby/Thread|المهام الفرعية]] التي يتم إنشاؤها عندما تكون قيمة هذه الراية مساوية للقيمة <code>true</code> ستبعث رسالة إلى المجرى <code>stderr$</code> إذا أنهى استثناء ما هذه [[Ruby/Thread|المهمة الفرعية]].


كل [[Ruby/Thread|المهمة الفرعية]] التي تم إنشاؤها عندما تكون قيمة هذه الراية مساوية للقيمة true ستبعث رسالة على المجرى stderr $ إذا أنهى استثناء ما يقتل [[Ruby/Thread|المهمة الفرعية]].
يُستخدَم هذا التابع لإمساك الأخطاء في [[Ruby/Thread|المهمة الفرعية]] في وقت مبكر. لكن في بعض الحالات، قد لا ترغب في هذه المخرجات. هناك عدة طرق لتجنب المخرجات الزائدة:
 
*إذا لم يكن الاستثناء مقصودًا، فأفضل خيار أمامك هو إصلاح سبب الاستثناء بحيث لا يُطلق بعدها.
 
*إذا لم يكن الاستثناء مقصودًا، فقد يكون من الأفضل معالجته بالقرب من الموضع الذي أطلق منه بدلًا من تركه ينهي [[Ruby/Thread|المهمة الفرعية]].
 
*في حال كان مُؤمّنا (guaranteed)، سيتم ضم (join) [[Ruby/Thread|المهمة الفرعية]] عبر <code>[[Ruby/Thread/join|join]]</code> أو <code>[[Ruby/Thread/value|value]]</code>، بعد ذلك سيكون من الآمن تعطيل هذا التقرير عبر التعبير <code>Thread.current.report_on_exception = false</code> عند بدء تشغيل [[Ruby/Thread|المهمة الفرعية]]. لكن هذا قد يعالج الاستثناء في وقت متأخر، أو قد لا يٌعالج أبدا في حالة عدم ضم [[Ruby/Thread|المهمة الفرعية]] إن كانت [[Ruby/Thread|المهمة الفرعية]] الرئيسية (parent thread) معطلة.
سينتج هذه المخرجات على المجرى $ stderr:
يوجد أيضًا تابع نسخة (instance level method) لتعيين هذا الخيار ل[[Ruby/Thread|مهمة فرعية]] معينة، لذا راجع صفحة <code>[[Ruby/Thread/report on exception-i|report_on_exception]]</code>.
 
==البنية العامة==
<syntaxhighlight lang="ruby">#<Thread:...> terminated with exception (report_on_exception is true):
<syntaxhighlight lang="ruby">report_on_exception→ true or false‎</syntaxhighlight>
==القيمة المعادة==
تعاد قيمة منطقية تمثل حالة "التبليغ عند الاستثناء" (report on exception).
==أمثلة==
مثال على استخدام التابع <code>report_on_exception‎</code>:<syntaxhighlight lang="ruby">Thread.new { 1.times { raise } }‎</syntaxhighlight>سينتج هذا المثال المخرجات التالية في المجرى ‎<code>$stderr</code>:<syntaxhighlight lang="text">#<Thread:...> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
Traceback (most recent call last):
         2: from -e:1:in `block in <main>'
         2: from -e:1:in `block in <main>'
         1: from -e:1:in `times'‎</syntaxhighlight>
         1: from -e:1:in `times'‎</syntaxhighlight>
 
==انظر أيضًا==
يُستخدم هذا لإمساك الأخطاء في [[Ruby/Thread|المهمة الفرعية]] في وقت مبكر. في بعض الحالات، قد لا ترغب في هذه المخرجات. هناك عدة طرق لتجنب المخرجات الزائدة:
*التابع <code>[[Ruby/Thread/report on exception-3D|report_on_exception=]]</code>: يضبط التابع عند استدعائه بالشكل <code>report_on_exception= boolean‎</code> حالة "التبليغ عند الاستثناء" (report on exception).
 
إذا لم يكن الاستثناء مقصودا، فأفضل خيار أمامك هو إصلاح سبب الاستثناء بحيث لا يُطلق بعدها.
 
وإذا لم يكن الاستثناء مقصودًا، فقد يكون من الأفضل معالجته بالقرب من الموضع الذي أطلق منه بدلاً من تركه ينهي [[Ruby/Thread|المهمة الفرعية]] <code>[[Ruby/Thread|Thread]]</code>.
 
في حال كان مُؤمّنا (guaranteed)، سيتم ضم [[Ruby/Thread|المهمة الفرعية]] <code>[[Ruby/Thread|Thread]]</code> عبر <code>[[Ruby/Thread/join|#join]]</code> أو <code>[[Ruby/Thread/value|#value]]</code>، ثم سيكون من الآمن تعطيل هذا التقرير بواسطة التعبير <code>Thread.current.report_on_exception = false</code> عند بدء تشغيل [[Ruby/Thread|المهمة الفرعية]] <code>[[Ruby/Thread|Thread]]</code>. لكن هذا قد يعالج الاستثناء في وقت متأخر، أو قد لا يٌعالج أبدا في حالة عدم ضم <code>[[Ruby/Thread|Thread]]</code> إن كانت [[Ruby/Thread|المهمة الفرعية]] الرئيسية (parent thread) معطلة، إلخ.
 
انظر أيضا صفحة <code>[[Ruby/Thread/report_on_exception-3D|::report_on_exception=]]</code>.
 
يوجد أيضًا تابع نسخة (instance level method) لتعيين هذا الخيار ل[[Ruby/Thread|مهمة فرعية]] معينة، راجع صفحة <code>[[Ruby/Thread/report_on_exception-3D|report_on_exception=]]</code>.
==البنية العامة==
<syntaxhighlight lang="ruby">report_on_exception→ true or false‎</syntaxhighlight>
==القيمة المُعادة==
==أمثلة==
مثال على استخدام التابع <code>report_on_exception‎</code>:
<syntaxhighlight lang="ruby">Thread.new { 1.times { raise } }‎</syntaxhighlight>
==انظر أيضا==
* التابع <code>[[Ruby/Thread/raise|raise]]</code>: يطلق التابع <code>raise</code> استثناء من [[Ruby/Thread|مهمة فرعية]] معينة. لا يلزم أن يكون الُمستدعي (caller) من <code>thr</code>. انظر صفحة <code>[[Ruby/Kernel/raise|Kernel#raise]]</code> لمزيد من المعلومات.
* التابع <code>[[Ruby/Thread/report_on_exception-3D|report_on_exception=]]</code>: يُعيد التابع <code>report_on_exception=</code> الحالة الجديدة. عند إعطائه القيمة <code>true</code>، سترث كل [[Ruby/Thread|المهمة الفرعية]] التي تم إنشاؤها بعد ذلك الشرط (condition) وتبعث رسالة على المجرى $ stderr إذا أدى استثناء ما إلى إنهاء [[Ruby/Thread|مهمة فرعية]]:
==مصادر==
==مصادر==
*[http://ruby-doc.org/core-2.5.1/Thread.html#method-i-report_on_exception قسم التابع report_on_exception‎ في الصنف Thread‎ في توثيق روبي الرسمي.]
*[http://ruby-doc.org/core-2.5.1/Thread.html#method-i-report_on_exception قسم التابع report_on_exception‎ في الصنف Thread‎ في توثيق روبي الرسمي.]

المراجعة الحالية بتاريخ 12:47، 5 ديسمبر 2018

يعيد التابع report_on_exception حالة "التبليغ عند الاستثناء" (report on exception). القيمة الافتراضية هي true منذ روبي 2.5.

كل المهام الفرعية التي يتم إنشاؤها عندما تكون قيمة هذه الراية مساوية للقيمة true ستبعث رسالة إلى المجرى stderr$ إذا أنهى استثناء ما هذه المهمة الفرعية.

يُستخدَم هذا التابع لإمساك الأخطاء في المهمة الفرعية في وقت مبكر. لكن في بعض الحالات، قد لا ترغب في هذه المخرجات. هناك عدة طرق لتجنب المخرجات الزائدة:

  • إذا لم يكن الاستثناء مقصودًا، فأفضل خيار أمامك هو إصلاح سبب الاستثناء بحيث لا يُطلق بعدها.
  • إذا لم يكن الاستثناء مقصودًا، فقد يكون من الأفضل معالجته بالقرب من الموضع الذي أطلق منه بدلًا من تركه ينهي المهمة الفرعية.
  • في حال كان مُؤمّنا (guaranteed)، سيتم ضم (join) المهمة الفرعية عبر join أو value، بعد ذلك سيكون من الآمن تعطيل هذا التقرير عبر التعبير Thread.current.report_on_exception = false عند بدء تشغيل المهمة الفرعية. لكن هذا قد يعالج الاستثناء في وقت متأخر، أو قد لا يٌعالج أبدا في حالة عدم ضم المهمة الفرعية إن كانت المهمة الفرعية الرئيسية (parent thread) معطلة.

يوجد أيضًا تابع نسخة (instance level method) لتعيين هذا الخيار لمهمة فرعية معينة، لذا راجع صفحة report_on_exception.

البنية العامة

report_on_exception true or false

القيمة المعادة

تعاد قيمة منطقية تمثل حالة "التبليغ عند الاستثناء" (report on exception).

أمثلة

مثال على استخدام التابع report_on_exception‎:

Thread.new { 1.times { raise } }

سينتج هذا المثال المخرجات التالية في المجرى ‎$stderr:

#<Thread:...> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
        2: from -e:1:in `block in <main>'
        1: from -e:1:in `times'‎

انظر أيضًا

  • التابع report_on_exception=‎: يضبط التابع عند استدعائه بالشكل report_on_exception= boolean‎ حالة "التبليغ عند الاستثناء" (report on exception).

مصادر