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

من موسوعة حسوب
< Ruby‏ | Module
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>define_method‎</code> الخاص بالصنف <code>Module</code> في روبي}}</noinclude> تصنيف: Ruby ...'
 
ط مراجعة وتدقيق.
 
(مراجعتان متوسطتان بواسطة مستخدم واحد آخر غير معروضتين)
سطر 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). الوسيط المعطى parameter الذي استُدعي معه يمكن أن يكون من النوع <code>Proc</code> أو <code>Method</code> أو <code>UnboundMethod</code>. في حال تمرير كتلة، فستُستخدم كمتن (body) للتابع. تُقيّم هذه الكتلة باستخدام <code>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
سطر 11: سطر 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>.
==القيمة المُعادة==
==القيمة المعادة==
يعاد [[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>: في الشلك الأول، يعيد  مصفوفة من أسماء كل الثوابت التي يمكن الوصول إليها لحظة الاستدعاء. هناك تابع يحمل نفس الأسم، اضفه إلى الموسوعة الآن؟؟؟ تتضمن هذه القائمة أسماء جميع الوحدات والأصناف المحددة في النطاق الكلي (global scope).
* التابع <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: يضع قائمة بالثوابت الموجودة المهملة.

مصادر