التابع Proc.yield
في روبي
يستدعي التابع yield
الكتلة المرتبطة بالمتغير الذي استعمل معه مُعيِّنًا معاملات الكتلة إلى القيم المعطاة ضمنه باستخدام شيءٍ مشابهٍ لدلالات استدعاء التابع. يُعيد المعامل قيمة آخر تعبيرٍ قُيِّم في الكتلة.
a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
a_proc[9, 1, 2, 3] #=> [9, 18, 27]
a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
لاحظ أنَّ ().prc
يستدعي ()prc.call
مع المعاملات المُمرَّرة إليه نفسها. يُعدُّ هذا تجميلًا لغويًّا (syntactic sugar) لإخفاء "call"
فقط.
من أجل الكتل procs
المُنشأة باستخدام lambda
أو ()<-
، يُرمى خطأٌ إذا مُرِّر عدد خطأ من المعاملات إلى الكتلة. وأمَّا من أجل الكتل procs
المُنشأة باستخدام Proc.new
أو Kernel.proc
، يتم تجاهل المعاملات الزائدة الممرَّرة ضمنيًّا وتُعيَّن القيمة nil
لكل معامل منها.
a_proc = proc {|a,b| [a,b] }
a_proc.call(1) #=> [1, nil]
a_proc = lambda {|a,b| [a,b] }
a_proc.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
البنية العامة
prc[params,...] → obj
المعاملات
params
القيم التي ستُعيَّن إلى المعاملات ضمن الكتلة.
القيم المعادة
يُعاد الكائن الناتج عن استدعاء الكتلة وتنفيذها مع تمرير المعامل params
إليها.
انظر أيضًا
- التابع
hash
: يحسب قيمة التجزئة الموافقة لجسم الكتلةproc
التي استدعيت معه ثمَّ يعيدها. - التابع
?lambda
: يتحقَّق إذا كانت معالجة الوسائط صارمةً في الكائنProc
.
- التابع
to_proc
: يُعدُّ جزءًا من البروتوكول المستخدم في تحويل الكائنات إلى كائناتٍ من الصنفProc
.
- المعامل
===
: يستدعي الكتلة بتمرير الكائن الواقع على يمينه كمعاملٍ للنسخةproc
.