الفرق بين المراجعتين لصفحة: «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: يضع قائمة بالثوابت الموجودة المُتجاوزة.