التابع define_method
الخاص بالصنف Module
في روبي
يعرف التابع define_method
تابع نُسخ (instance method) في المُستقبِل (receiver). الوسيط المعطى parameter الذي استُدعي معه يمكن أن يكون من النوع Proc
أو Method
أو UnboundMethod
. في حال تمرير كتلة، فستُستخدم كمتن (body) للتابع. تُقيّم هذه الكتلة باستخدام instance_eval
، وهو أمر قد يكون مُشكلًا على البعض، لأن define_method
خاصة. (لهذا سنحتال ونستخدم send
في هذا المثال.)
الناتج:
البنية العامة
define_method(symbol, method) → symbol
define_method(symbol) { block }→ symbol
المعاملات
symbol
method
القيمة المُعادة
أمثلة
مثال على استخدام التابع 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
: في الشلك الأول، يعيد مصفوفة من أسماء كل الثوابت التي يمكن الوصول إليها لحظة الاستدعاء. هناك تابع يحمل نفس الأسم، اضفه إلى الموسوعة الآن؟؟؟ تتضمن هذه القائمة أسماء جميع الوحدات والأصناف المحددة في النطاق الكلي (global scope). - التابع
deprecate_constant
: يضع قائمة بالثوابت الموجودة المُتجاوزة.