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

من موسوعة حسوب
< Ruby‏ | Kernel
اذهب إلى التنقل اذهب إلى البحث
ط
 
سطر 5: سطر 5:
 
ينفذ التابع <code>loop</code> الكتلة البرمجية المعطاة بشكل متكرر.
 
ينفذ التابع <code>loop</code> الكتلة البرمجية المعطاة بشكل متكرر.
  
في حال لم تُعطى أي كتلة، فسيُعاد كائن من الصنف <code>[[Ruby/Enumerator|enumerator]]</code> بدلاً من ذلك.
+
في حال لم تُعطَ أية كتلة، فسيُعاد كائن من الصنف <code>[[Ruby/Enumerator|enumerator]]</code> بدلاً من ذلك.
  
يؤدي اطلاق الاستثناء <code>StopIteration</code> داخل الكتلة إلى إيقاف الحلقة التكرارية. في هذه الحالة، سيعيد التابع <code>loop</code> قيمة "النتيجة" المخزنة في الاستثناء.
+
يؤدي اطلاق الاستثناء <code>[[Ruby/StopIteration|StopIteration]]</code> داخل الكتلة إلى إيقاف الحلقة التكرارية. في هذه الحالة، سيعيد التابع <code>loop</code> قيمة "النتيجة" المخزنة في الاستثناء.
 
==البنية العامة==
 
==البنية العامة==
 
<syntaxhighlight lang="ruby">loop { block }
 
<syntaxhighlight lang="ruby">loop { block }
 
loop→ an_enumerator‎</syntaxhighlight>
 
loop→ an_enumerator‎</syntaxhighlight>
==القيمة المُعادة==
+
==القيمة المعادة==
يؤدي اطلاق الاستثناء <code>StopIteration</code> داخل الكتلة،  سيعيد التابع <code>loop</code> قيمة "النتيجة" المخزنة في الاستثناء. أما في حال لم تُعطى أي كتلة، فسيُعاد كائن من الصنف <code>[[Ruby/Enumerator|enumerator]]</code>.
+
يؤدي اطلاق الاستثناء [[Ruby/StopIteration|<code>StopIteration</code>]] داخل الكتلة إلى إعادة قيمة "النتيجة" المخزنة في الاستثناء. أما في حال لم تُعطَ أية كتلة، فسيُعاد كائن من الصنف <code>[[Ruby/Enumerator|enumerator]]</code>.
 
 
 
==أمثلة==
 
==أمثلة==
مثال على استخدام التابع <code>loop‎</code>:
+
مثال على استخدام التابع <code>loop‎</code>:<syntaxhighlight lang="ruby">loop do
<syntaxhighlight lang="ruby">loop do
 
 
   print "Input: "
 
   print "Input: "
 
   line = gets
 
   line = gets
 
   break if !line or line =~ /^qQ/
 
   break if !line or line =~ /^qQ/
 
   # ...
 
   # ...
end‎</syntaxhighlight>
+
end‎</syntaxhighlight>مثالٌ آخر على استعمال التابع <code>loop‎</code>:<syntaxhighlight lang="ruby">
 +
enum = Enumerator.new { |y|
 +
  y << "one"
 +
  y << "two"
 +
  :ok
 +
}
 +
 
 +
result = loop {
 +
  puts enum.next
 +
} #=> :ok
 +
</syntaxhighlight>
 
==انظر أيضا==
 
==انظر أيضا==
* التابع <code>[[Ruby/Kernel/lambda|lambda]]</code>: يكافئ التابع <code>lambda</code> التعبير <code>Proc.new</code>، باستثناء أنّ كائنات <code>Proc</code> الناتجة ستتحقق من عدد الوسائط الممررة عند استدعائها.
+
*التابع <code>[[Ruby/Kernel/lambda|lambda]]</code>: يكافئ التعبير <code>Proc.new</code>، باستثناء أنّ كائنات <code>Proc</code> الناتجة ستتحقق من عدد الوسائط الممررة عند استدعائها.
 
 
 
==مصادر==
 
==مصادر==
*[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-loop قسم التابع loop‎ في الصنف Kernel‎ في توثيق روبي الرسمي.]
+
*[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-loop قسم التابع loop‎ في الصنف Kernel‎ في توثيق روبي الرسمي.]

المراجعة الحالية بتاريخ 14:51، 15 نوفمبر 2018

ينفذ التابع loop الكتلة البرمجية المعطاة بشكل متكرر.

في حال لم تُعطَ أية كتلة، فسيُعاد كائن من الصنف enumerator بدلاً من ذلك.

يؤدي اطلاق الاستثناء StopIteration داخل الكتلة إلى إيقاف الحلقة التكرارية. في هذه الحالة، سيعيد التابع loop قيمة "النتيجة" المخزنة في الاستثناء.

البنية العامة

loop { block }
loop an_enumerator

القيمة المعادة

يؤدي اطلاق الاستثناء StopIteration داخل الكتلة إلى إعادة قيمة "النتيجة" المخزنة في الاستثناء. أما في حال لم تُعطَ أية كتلة، فسيُعاد كائن من الصنف enumerator.

أمثلة

مثال على استخدام التابع loop‎:

loop do
  print "Input: "
  line = gets
  break if !line or line =~ /^qQ/
  # ...
end

مثالٌ آخر على استعمال التابع loop‎:

enum = Enumerator.new { |y|
  y << "one"
  y << "two"
  :ok
}

result = loop {
  puts enum.next
} #=> :ok

انظر أيضا

  • التابع lambda: يكافئ التعبير Proc.new، باستثناء أنّ كائنات Proc الناتجة ستتحقق من عدد الوسائط الممررة عند استدعائها.

مصادر