الفرق بين المراجعتين ل"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
).