الفرق بين المراجعتين ل"Ruby/Kernel/catch"

من موسوعة حسوب
< Ruby‏ | Kernel
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<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>catch</code> حيث <code>tag</code> قيمة <code>object_id</code> الخاص به مساوية لقيمته لدى tag2. عند العثور عليه، يتوقف تنفيذ الكتلة وتُعاد قيمة val (أو <code>nil</code> إذا لم يتم تمرير وسيط ثاني إلى <code>throw</code>).
 
 
 
عند تمرير <code>tag</code> كوسيط أول، ستعيده <code>catch</code> كوسيط للكتلة.
 
 
 
في حال عدم إعطاء وسيط <code>tag</code>، ستعيد <code>catch</code> كائنًا جديدًا فريدًا (كما هو الحال في <code>Object.new</code>) كوسيط للكتلة. يمكن استخدام هذا الكائن حينها كوسيط للتابع <code>throw</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>:<syntaxhighlight lang="ruby">catch(1) { 123 }            # => 123
 +
 +
catch(1) { throw(1, 456) }  # => 456
 +
catch(1) { throw(1) }      # => nil
  
==القيمة المُعادة==
+
catch(1) {|x| x + 2 }       # => 3</syntaxhighlight>
 
 
==أمثلة==
 
مثال على استخدام التابع <code>catch‎</code>:
 
<syntaxhighlight lang="ruby">catch(1) { 123 }           # => 123
 
</syntaxhighlight>
 
 
==انظر أيضا==
 
==انظر أيضا==
* التابع <code>[[Ruby/Integer/X_name_X|X_name_X]]</code>:  
+
*التابع <code>[[Ruby/Kernel/throw|throw]]</code>: ينقل الضبط (control) إلى نهاية كتلة <code>catch</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‎ في توثيق روبي الرسمي.]

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

مصادر