الفرق بين المراجعتين لصفحة: «Ruby/Continuation»

من موسوعة حسوب
لا ملخص تعديل
لا ملخص تعديل
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>Continuation</code> في روبي}}</noinclude>
[[تصنيف: Ruby]]
[[تصنيف: Ruby Continuation]]
تُولّد الكائنات من الصنف<code>Continuation</code> بواسطة التابع <code>Kernel#callcc</code>، بعد استيراد "<code>continuation</code>". يُعدّ التابع عنوان إعادة (return address)  وسياق تنفيذ (execution context)، مما يتيح إعادة غير محلية (nonlocal return) في نهاية الكتلة <code>callcc</code> من أي مكان في البرنامج.
تُولّد الكائنات من الصنف<code>Continuation</code> بواسطة التابع <code>Kernel#callcc</code>، بعد استيراد "<code>continuation</code>". يُعدّ التابع عنوان إعادة (return address)  وسياق تنفيذ (execution context)، مما يتيح إعادة غير محلية (nonlocal return) في نهاية الكتلة <code>callcc</code> من أي مكان في البرنامج.



مراجعة 09:04، 18 سبتمبر 2018

تُولّد الكائنات من الصنفContinuation بواسطة التابع Kernel#callcc، بعد استيراد "continuation". يُعدّ التابع عنوان إعادة (return address) وسياق تنفيذ (execution context)، مما يتيح إعادة غير محلية (nonlocal return) في نهاية الكتلة callcc من أي مكان في البرنامج.

كائنات الصنفContinuation هي أقرب إلى نسخة من setjmp/longjmp في لغة C (على الرغم من أنها تحتوي على حالات أكثر، لذلك فيمكن اعتبارها أقرب إلى المهام الفرعية [threads])>.

على سبيل المثال:

require "continuation"
arr = [ "Freddie", "Herbie", "Ron", "Max", "Ringo" ]
callcc{|cc| $cc = cc}
puts(message = arr.shift)
$cc.call unless message =~ /Max/

ستنتج:

Freddie
Herbie
Ron
Max

ويمكن أيضًا استدعاء callcc في توابع أخرى:

require "continuation"

def g
  arr = [ "Freddie", "Herbie", "Ron", "Max", "Ringo" ]
  cc = callcc { |cc| cc }
  puts arr.shift
  return cc, arr.size
end

def f
  c, size = g
  c.call(c) if size > 1
end

f

يسمح هذا المثال للحلقة الداخلية بالخروج مبكرًا:

require "continuation"
callcc {|cont|
  for i in 0..4
    print "\n#{i}: "
    for j in i*5...(i+1)*5
      cont.call() if j == 17
      printf "%3d", j
    end
  end
}
puts

ستنتج:

0:   0  1  2  3  4
1:   5  6  7  8  9
2:  10 11 12 13 14
3:  15 16

توابع الصنف العامة (Public Class Methods)

التابع cont

يقوم التابع cont باستدعاء continuation. ويستمر البرنامج من نهاية كتلة callcc.

التابع call

يقوم التابع call باستدعاء continuation. ويستمر البرنامج من نهاية كتلة callcc.  

مصادر