التابع catch
الخاص بالصنف Kernel
في روبي
ينفذ التابع 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
).