الفرق بين المراجعتين لصفحة: «Ruby/Module/define method»
لا ملخص تعديل |
لا ملخص تعديل |
||
سطر 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>: يعيد مصفوفة من أسماء كل الثوابت التي يمكن الوصول إليها لحظة الاستدعاء. |
مراجعة 23:43، 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
الناتج:
In Fred
Charge it!
#<B:0x401b39e8>
انظر أيضا
- التابع
constants
: يعيد مصفوفة من أسماء كل الثوابت التي يمكن الوصول إليها لحظة الاستدعاء. - التابع
deprecate_constant
: يضع قائمة بالثوابت الموجودة المُتجاوزة.