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

من موسوعة حسوب
< Ruby‏ | Module
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>define_method‎</code> الخاص بالصنف <code>Module</code> في روبي}}</noinclude> تصنيف: Ruby ...'
 
لا ملخص تعديل
سطر 3: سطر 3:
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Module]]
[[تصنيف: Ruby Module]]
يعرف التابع <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). الوسيط المعطى <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> في المثال أسفله.)
 
الناتج:
==البنية العامة==
==البنية العامة==
<syntaxhighlight lang="ruby">define_method(symbol, method)  → symbol
<syntaxhighlight lang="ruby">define_method(symbol, method)  → symbol
سطر 11: سطر 9:
==المعاملات==
==المعاملات==
===<code>symbol‎</code>===
===<code>symbol‎</code>===
رمز.


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


 
تابع نُسخة.
==القيمة المُعادة==
==القيمة المُعادة==
يعيد رمز symbol.


==أمثلة==
==أمثلة==
سطر 37: سطر 37:
a.betty‎</syntaxhighlight>
a.betty‎</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‎ في توثيق روبي الرسمي.]

مراجعة 23:41، 26 أكتوبر 2018

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

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

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

المعاملات

symbol‎

رمز.

method‎

تابع نُسخة.

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

يعيد رمز symbol.

أمثلة

مثال على استخدام التابع 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

انظر أيضا

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

مصادر