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

من موسوعة حسوب
< Ruby‏ | Proc
أنشأ الصفحة ب'{{DISPLAYTITLE:التابع Proc.call في روبي}} يستدعي التابع call الكتلة المرتبطة بالمتغير الذي استعمل معه مُع...'
 
طلا ملخص تعديل
 
سطر 1: سطر 1:
{{DISPLAYTITLE:التابع Proc.call في روبي}}
{{DISPLAYTITLE:التابع <code>Proc.call</code> في روبي}}
 
يستدعي التابع <code>call</code> الكتلة المرتبطة بالمتغير الذي استعمل معه مُعيِّنًا معاملات الكتلة إلى القيم المعطاة ضمنه باستخدام شيءٍ مشابهٍ لدلالات استدعاء التابع. يُعيد المعامل قيمة آخر تعبيرٍ قُيِّم في الكتلة.<syntaxhighlight lang="ruby">
يستدعي التابع call الكتلة المرتبطة بالمتغير الذي استعمل معه مُعيِّنًا معاملات الكتلة إلى القيم المعطاة ضمنه باستخدام شيءٍ مشابهٍ لدلالات استدعاء التابع. يُعيد المعامل قيمة آخر تعبيرٍ قُيِّم في الكتلة.<syntaxhighlight lang="ruby">
a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
a_proc.call(9, 1, 2, 3)    #=> [9, 18, 27]
a_proc.call(9, 1, 2, 3)    #=> [9, 18, 27]
سطر 8: سطر 7:
a_proc.yield(9, 1, 2, 3)  #=> [9, 18, 27]
a_proc.yield(9, 1, 2, 3)  #=> [9, 18, 27]


</syntaxhighlight>لاحظ أنَّ ().prc يستدعي ()prc.call مع المعاملات المُمرَّرة إليه نفسها. يُعدُّ هذا تجميلًا لغويًّا (syntactic sugar) لإخفاء "call" فقط.
</syntaxhighlight>لاحظ أنَّ <code>().prc</code> يستدعي <code>()prc.call</code> مع المعاملات المُمرَّرة إليه نفسها. يُعدُّ هذا تجميلًا لغويًّا (syntactic sugar) لإخفاء <code>"call"</code> فقط.


من أجل الكتل procs المُنشأة باستخدام lambda أو ()<-، يُرمى خطأٌ إذا مُرِّر عدد خطأ من المعاملات إلى الكتلة. وأمَّا من أجل الكتل procs المُنشأة باستخدام Proc.new أو Kernel.proc، يتم تجاهل المعاملات الزائدة الممرَّرة ضمنيًّا وتُعيَّن القيمة nil لكل معامل منها.<syntaxhighlight lang="ruby">
من أجل الكتل <code>procs</code> المُنشأة باستخدام <code>lambda</code> أو <code>()<-</code>، يُرمى خطأٌ إذا مُرِّر عدد خطأ من المعاملات إلى الكتلة. وأمَّا من أجل الكتل <code>procs</code> المُنشأة باستخدام <code>[[Ruby/Proc/new|Proc.new]]</code> أو [[Ruby/Kernel/proc|<code>Kernel.proc</code>]]، يتم تجاهل المعاملات الزائدة الممرَّرة ضمنيًّا وتُعيَّن القيمة <code>nil</code> لكل معامل منها.<syntaxhighlight lang="ruby">
a_proc = proc {|a,b| [a,b] }
a_proc = proc {|a,b| [a,b] }
a_proc.call(1)  #=> [1, nil]
a_proc.call(1)  #=> [1, nil]
سطر 20: سطر 19:


== البنية العامة ==
== البنية العامة ==
<syntaxhighlight lang="ruby">
prc[params,...] → obj
prc[params,...] → obj
</syntaxhighlight>


== المعاملات ==
== المعاملات ==


=== params ===
=== <code>params</code> ===
القيم التي ستُعيَّن إلى المعاملات ضمن الكتلة.
القيم التي ستُعيَّن إلى المعاملات ضمن الكتلة.


== القيم المعادة ==
== القيم المعادة ==
يُعاد الكائن الناتج عن استدعاء الكتلة وتنفيذها مع تمرير المعامل params إليها.
يُعاد الكائن الناتج عن استدعاء الكتلة وتنفيذها مع تمرير المعامل <code>params</code> إليها.


== انظر أيضًا ==
== انظر أيضًا ==
* التابع hash: يحسب قيمة التجزئة الموافقة لجسم الكتلة proc التي استدعيت معه ثمَّ يعيدها.
*التابع [[Ruby/Proc/hash|<code>hash</code>]]: يحسب قيمة التجزئة الموافقة لجسم الكتلة <code>proc</code> التي استدعيت معه ثمَّ يعيدها.
* التابع ?lambda: يتحقَّق إذا كانت معالجة الوسائط صارمةً في الكائن Proc.
*التابع [[Ruby/Proc/lambda-3F|<code>?lambda</code>]]: يتحقَّق إذا كانت معالجة الوسائط صارمةً في الكائن <code>Proc</code>.
* التابع to_proc: يُعدُّ جزءًا من البروتوكول المستخدم في تحويل الكائنات إلى كائناتٍ من الصنف Proc.
 
* المعامل ===: يستدعي الكتلة بتمرير الكائن الواقع على يمينه كمعاملٍ للنسخة proc.
*التابع <code>[[Ruby/Proc/to proc|to_proc]]</code>: يُعدُّ جزءًا من البروتوكول المستخدم في تحويل الكائنات إلى كائناتٍ من الصنف <code>Proc</code>.
 
* المعامل <code>[[Ruby/Proc/3D-3D-3D|===]]</code>: يستدعي الكتلة بتمرير الكائن الواقع على يمينه كمعاملٍ للنسخة <code>proc</code>.


== مصادر ==
== مصادر ==

المراجعة الحالية بتاريخ 07:55، 26 نوفمبر 2018

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

مصادر