التابع Module.define_method‎ في روبي

من موسوعة حسوب
< Ruby‏ | Module

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

مصادر