الفرق بين المراجعتين لصفحة: «Ruby/Kernel/catch»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق |
||
سطر 3: | سطر 3: | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby Kernel]] | [[تصنيف: Ruby Kernel]] | ||
ينفذ التابع <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>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> الصحيحة. | 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> الصحيحة. | ||
==البنية العامة== | ==البنية العامة== | ||
سطر 10: | سطر 10: | ||
===<code>tag</code>=== | ===<code>tag</code>=== | ||
عند تمرير <code>tag</code> كوسيط أول، ستعيده <code>catch</code> كوسيط للكتلة. | عند تمرير <code>tag</code> كوسيط أول، ستعيده <code>catch</code> كوسيط للكتلة. | ||
==القيمة | ==القيمة المعادة== | ||
تعاد قيمة آخر تعبير تم تقييمه. | |||
==أمثلة== | ==أمثلة== | ||
سطر 21: | سطر 21: | ||
catch(1) {|x| x + 2 } # => 3</syntaxhighlight> | catch(1) {|x| x + 2 } # => 3</syntaxhighlight> | ||
==انظر أيضا== | ==انظر أيضا== | ||
*التابع <code>[[Ruby/Kernel/throw|throw]]</code>: ينقل | *التابع <code>[[Ruby/Kernel/throw|throw]]</code>: ينقل الضبط (control) إلى نهاية كتلة <code>catch</code> المُترقبة للوسم المعطى. | ||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-catch قسم | *[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-catch قسم التابع catch في الصنف Kernel في توثيق روبي الرسمي.] |
المراجعة الحالية بتاريخ 11:42، 15 نوفمبر 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(1) { 123 } # => 123
catch(1) { throw(1, 456) } # => 456
catch(1) { throw(1) } # => nil
catch(1) {|x| x + 2 } # => 3
انظر أيضا
- التابع
throw
: ينقل الضبط (control) إلى نهاية كتلةcatch
المُترقبة للوسم المعطى.