التابع catch‎ الخاص بالصنف Kernel في روبي

من موسوعة حسوب
< Ruby‏ | 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 المُترقبة للوسم المعطى.

مصادر