الفرق بين المراجعتين ل"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: يضع قائمة بالثوابت الموجودة المهملة.

مصادر