الفرق بين المراجعتين لصفحة: «Ruby/Kernel/catch»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>catch</code> الخاص بالصنف <code>Kernel</code> في روبي}}</noinclude> تصنيف: Ruby تصني...' |
لا ملخص تعديل |
||
سطر 3: | سطر 3: | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby Kernel]] | [[تصنيف: Ruby Kernel]] | ||
ينفذ <code>catch</code> كتلته البرمجية في حال عدم استدعاء <code>throw</code>، فستنفّذ الكتلة بشكل طبيعي، وسيعيد <code>catch</code> قيمة آخر تعبير تم تقييمه. | ينفذ التابع <code>catch</code> كتلته البرمجية. في حال عدم استدعاء <code>throw</code>، فستنفّذ الكتلة بشكل طبيعي، وسيعيد <code>catch</code> قيمة آخر تعبير تم تقييمه.<syntaxhighlight lang="ruby">catch(1) { 123 } # => 123</syntaxhighlight>إذا استُدعي <code>throw(tag2, val)</code> ، فستبحث روبي في المكدس (stack) عن كتلة مسك <code>catch،</code> التي يكون لـ <code>tag</code> الخاص بها نفس قيمة <code>object_id</code> الخاص بـ <code>tag2</code>. وعند العثور عليه، يتوقف تنفيذ الكتلة وتُعاد <code>val</code> (أو <code>nil</code> إذا لم يتم تمرير وسيط ثاني إلى <code>throw</code>).<syntaxhighlight lang="ruby">catch(1) { throw(1, 456) } # => 456 | ||
catch(1) { throw(1) } # => nil</syntaxhighlight>عند تمرير <code>tag</code> كوسيط أول، ستعيده <code>catch</code> كوسيط للكتلة.<syntaxhighlight lang="ruby">catch(1) {|x| x + 2 } # => 3</syntaxhighlight>في حال عدم إعطاء الوسيط <code>tag</code>، ستعيد <code>catch</code> كائنًا جديدًا (كما هو الحال في <code>Object.new</code>) كوسيط للكتلة. يمكن استخدام هذا الكائن حينها كوسيط للتابع <code>throw</code>، وسيتطابق مع كتلة <code>catch</code> الصحيحة. | |||
إذا استُدعي <code>throw(tag2, val)</code> ، فستبحث روبي في المكدس عن كتلة <code> | |||
عند تمرير <code>tag</code> كوسيط أول، ستعيده <code>catch</code> كوسيط للكتلة. | |||
في حال عدم إعطاء | |||
==البنية العامة== | ==البنية العامة== | ||
<syntaxhighlight lang="ruby">catch([tag]) {|tag| block } → obj</syntaxhighlight> | <syntaxhighlight lang="ruby">catch([tag]) {|tag| block } → obj</syntaxhighlight> | ||
==المعاملات== | ==المعاملات== | ||
===<code>tag</code>=== | ===<code>tag</code>=== | ||
عند تمرير <code>tag</code> كوسيط أول، ستعيده <code>catch</code> كوسيط للكتلة. | |||
==القيمة المُعادة== | ==القيمة المُعادة== | ||
يعيد <code>catch</code> قيمة آخر تعبير تم تقييمه. | |||
==أمثلة== | ==أمثلة== | ||
مثال على استخدام التابع <code>catch</code>: | مثال على استخدام التابع <code>catch</code>:<syntaxhighlight lang="ruby">catch(1) { 123 } # => 123 | ||
<syntaxhighlight lang="ruby">catch(1) { 123 } # => 123 | | ||
</syntaxhighlight> | catch(1) { throw(1, 456) } # => 456 | ||
catch(1) { throw(1) } # => nil | |||
catch(1) {|x| x + 2 } # => 3</syntaxhighlight> | |||
==انظر أيضا== | ==انظر أيضا== | ||
* التابع <code>[[Ruby/ | *التابع <code>[[Ruby/Kernel/throw|throw]]</code>: ينقل التابع <code>throw</code> الضبط (control) إلى نهاية كتلة <code>catch</code> المُترقبة للوسم المعطى (<code>tag</code>). | ||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-catch قسم التابع catch في الصنف Kernel في توثيق روبي الرسمي.] | *[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-catch قسم التابع catch في الصنف Kernel في توثيق روبي الرسمي.] |
مراجعة 17:15، 21 أكتوبر 2018
ينفذ التابع catch
كتلته البرمجية. في حال عدم استدعاء throw
، فستنفّذ الكتلة بشكل طبيعي، وسيعيد catch
قيمة آخر تعبير تم تقييمه.
catch(1) { 123 } # => 123
إذا استُدعي throw(tag2, val)
، فستبحث روبي في المكدس (stack) عن كتلة مسك catch،
التي يكون لـ tag
الخاص بها نفس قيمة object_id
الخاص بـ tag2
. وعند العثور عليه، يتوقف تنفيذ الكتلة وتُعاد val
(أو nil
إذا لم يتم تمرير وسيط ثاني إلى throw
).
catch(1) { throw(1, 456) } # => 456
catch(1) { throw(1) } # => nil
عند تمرير tag
كوسيط أول، ستعيده catch
كوسيط للكتلة.
catch(1) {|x| x + 2 } # => 3
في حال عدم إعطاء الوسيط tag
، ستعيد catch
كائنًا جديدًا (كما هو الحال في Object.new
) كوسيط للكتلة. يمكن استخدام هذا الكائن حينها كوسيط للتابع throw
، وسيتطابق مع كتلة catch
الصحيحة.
البنية العامة
catch([tag]) {|tag| block } → obj
المعاملات
tag
عند تمرير tag
كوسيط أول، ستعيده catch
كوسيط للكتلة.
القيمة المُعادة
يعيد catch
قيمة آخر تعبير تم تقييمه.
أمثلة
مثال على استخدام التابع catch
:
catch(1) { 123 } # => 123
catch(1) { throw(1, 456) } # => 456
catch(1) { throw(1) } # => nil
catch(1) {|x| x + 2 } # => 3
انظر أيضا
- التابع
throw
: ينقل التابعthrow
الضبط (control) إلى نهاية كتلةcatch
المُترقبة للوسم المعطى (tag
).