التابع Proc.yield في روبي

من موسوعة حسوب
< Ruby‏ | Proc
اذهب إلى التنقل اذهب إلى البحث

يستدعي التابع 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.

مصادر