الفرق بين المراجعتين لصفحة: «Ruby/Module/define method»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق. |
||
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: التابع <code>define_method | <noinclude>{{DISPLAYTITLE: التابع <code>Module.define_method</code> في روبي}}</noinclude> | ||
[[تصنيف: Ruby]] | [[تصنيف: Ruby]] | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby Module]] | [[تصنيف: Ruby Module Class]] | ||
يعرّف التابع <code>define_method</code> تابع نُسخة (instance method) في المُستقبِل (receiver) | يعرّف التابع <code>define_method</code> تابع نُسخة (instance method) في المُستقبِل (receiver). في حال تمرير كتلة، فستُستخدم كجسم (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 | ||
سطر 9: | سطر 9: | ||
==المعاملات== | ==المعاملات== | ||
===<code>symbol</code>=== | ===<code>symbol</code>=== | ||
رمز. | [[Ruby/Symbol|رمز]]. | ||
===<code>method</code>=== | ===<code>method</code>=== | ||
تابع نُسخة. | تابع نُسخة. يمكن أن يكون من النوع <code>[[Ruby/Proc|Proc]]</code> أو <code>[[Ruby/Method|Method]]</code> أو <code>[[Ruby/UnboundMethod|UnboundMethod]]</code>. | ||
==القيمة | ==القيمة المعادة== | ||
يعاد [[Ruby/Symbol|رمزٌ]]. | |||
==أمثلة== | ==أمثلة== | ||
سطر 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>: يعيد مصفوفة من أسماء كل الثوابت التي يمكن الوصول إليها لحظة الاستدعاء. | ||
* التابع <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 قسم | *[http://ruby-doc.org/core-2.5.1/Module.html#method-i-define_method قسم التابع define_method في الصنف Module في توثيق روبي الرسمي.] |
المراجعة الحالية بتاريخ 11:52، 19 نوفمبر 2018
يعرّف التابع 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
: يضع قائمة بالثوابت الموجودة المهملة.