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

من موسوعة حسوب
< Ruby‏ | Module
لا ملخص تعديل
ط مراجعة وتدقيق.
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: التابع <code>define_method‎</code> الخاص بالصنف <code>Module</code> في روبي}}</noinclude>
<noinclude>{{DISPLAYTITLE: التابع <code>Module.define_method‎</code> في روبي}}</noinclude>
[[تصنيف: Ruby]]
[[تصنيف: Ruby]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Module]]
[[تصنيف: Ruby Module Class]]
يعرّف التابع <code>define_method</code> تابع نُسخة (instance method) في المُستقبِل (receiver). الوسيط المعطى <code>method</code>، يمكن أن يكون من النوع <code>[[Ruby/Proc|Proc]]</code> أو <code>[[Ruby/Method|Method]]</code> أو <code>[[Ruby/UnboundMethod|UnboundMethod]]</code>. في حال تمرير كتلة، فستُستخدم كمتن (body) للتابع. تُقيّم هذه الكتلة باستخدام التابع <code>[[Ruby/Module/instance eval|instance_eval]]</code>، وهو أمر قد يكون مُشكلًا على البعض، لأن <code>define_method</code> خاصة. (لهذا سنحتال ونستخدم التابع <code>send</code> في المثال أسفله.)
يعرّف التابع <code>define_method</code> تابع نُسخة (instance method) في المُستقبِل (receiver). في حال تمرير كتلة، فستُستخدم كجسم (body) للتابع. تُقيّم هذه الكتلة باستخدام التابع <code>[[Ruby/Module/instance eval|instance_eval]]</code>، وهو أمر قد يكون مُشكلًا على البعض، لأن <code>define_method</code> خاصة. (لهذا سنحتال ونستخدم التابع <code>send</code> في المثال التالي.)
==البنية العامة==
==البنية العامة==
<syntaxhighlight lang="ruby">define_method(symbol, method)  → symbol
<syntaxhighlight lang="ruby">define_method(symbol, method)  → symbol
سطر 9: سطر 9:
==المعاملات==
==المعاملات==
===<code>symbol‎</code>===
===<code>symbol‎</code>===
رمز.
[[Ruby/Symbol|رمز]].


===<code>method‎</code>===
===<code>method‎</code>===


تابع نُسخة.
تابع نُسخة. يمكن أن يكون من النوع <code>[[Ruby/Proc|Proc]]</code> أو <code>[[Ruby/Method|Method]]</code> أو <code>[[Ruby/UnboundMethod|UnboundMethod]]</code>.
==القيمة المُعادة==
==القيمة المعادة==
يعيد رمز symbol.
يعاد [[Ruby/Symbol|رمزٌ]].


==أمثلة==
==أمثلة==
سطر 35: سطر 35:
a.wilma
a.wilma
a.create_method(:betty) { p self }
a.create_method(:betty) { p self }
a.betty‎</syntaxhighlight>
a.betty‎</syntaxhighlight>ناتج تنفيذ هذه الشيفرة هو:<syntaxhighlight lang="ruby">In Fred
Charge it!
#<B:0x401b39e8></syntaxhighlight>
==انظر أيضا==
==انظر أيضا==
* التابع <code>[[Ruby/Module/constants|constants]]</code>:  يعيد  مصفوفة من أسماء كل الثوابت التي يمكن الوصول إليها لحظة الاستدعاء.  
* التابع <code>[[Ruby/Module/constants|constants]]</code>:  يعيد  مصفوفة من أسماء كل الثوابت التي يمكن الوصول إليها لحظة الاستدعاء.  
* التابع <code>[[Ruby/Module/deprecate_constant|deprecate_constant]]</code>: يضع قائمة بالثوابت الموجودة المُتجاوزة.
* التابع <code>[[Ruby/Module/deprecate_constant|deprecate_constant]]</code>: يضع قائمة بالثوابت الموجودة المهملة.


==مصادر==
==مصادر==
*[http://ruby-doc.org/core-2.5.1/Module.html#method-i-define_method قسم التابع define_method‎ في الصنف Module‎ في توثيق روبي الرسمي.]
*[http://ruby-doc.org/core-2.5.1/Module.html#method-i-define_method قسم التابع define_method‎ في الصنف Module‎ في توثيق روبي الرسمي.]

المراجعة الحالية بتاريخ 11:52، 19 نوفمبر 2018

يعرّف التابع define_method تابع نُسخة (instance method) في المُستقبِل (receiver). في حال تمرير كتلة، فستُستخدم كجسم (body) للتابع. تُقيّم هذه الكتلة باستخدام التابع instance_eval، وهو أمر قد يكون مُشكلًا على البعض، لأن define_method خاصة. (لهذا سنحتال ونستخدم التابع send في المثال التالي.)

البنية العامة

define_method(symbol, method)   symbol
define_method(symbol) { block } symbol

المعاملات

symbol‎

رمز.

method‎

تابع نُسخة. يمكن أن يكون من النوع Proc أو Method أو UnboundMethod.

القيمة المعادة

يعاد رمزٌ.

أمثلة

مثال على استخدام التابع define_method‎:

class A
  def fred
    puts "In Fred"
  end
  def create_method(name, &block)
    self.class.send(:define_method, name, &block)
  end
  define_method(:wilma) { puts "Charge it!" }
end
class B < A
  define_method(:barney, instance_method(:fred))
end
a = B.new
a.barney
a.wilma
a.create_method(:betty) { p self }
a.betty

ناتج تنفيذ هذه الشيفرة هو:

In Fred
Charge it!
#<B:0x401b39e8>

انظر أيضا

  • التابع constants: يعيد مصفوفة من أسماء كل الثوابت التي يمكن الوصول إليها لحظة الاستدعاء.
  • التابع deprecate_constant: يضع قائمة بالثوابت الموجودة المهملة.

مصادر