المعامل []
في الصنف Proc.call
في روبي
يستدعي المعامل []
الكتلة المرتبطة بالمتغير الذي استعمل معه مُعيِّنًا معاملات الكتلة إلى القيم المعطاة ضمنه باستخدام شيءٍ مشابهٍ لدلالات استدعاء التابع. يُعيد المعامل قيمة آخر تعبيرٍ قُيِّم في الكتلة.
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
.