الفرق بين المراجعتين لصفحة: «Ruby/Module/define method»

من موسوعة حسوب
< Ruby‏ | Module
لا ملخص تعديل
لا ملخص تعديل
سطر 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: يضع قائمة بالثوابت الموجودة المُتجاوزة.

مصادر