المعامل [] في الصنف 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.
مصادر
- صفحة المعامل [ في الصنف Proc في توثيق روبي الرسمي.]