التابع 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).