الفرق بين المراجعتين لصفحة: «Ruby/Module/define method»
أنشأ الصفحة ب'<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). الوسيط المعطى <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>: | * التابع <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
: يضع قائمة بالثوابت الموجودة المُتجاوزة.