الصنف UnboundMethod في روبي

من موسوعة حسوب

تدعم روبي شكلين من التوابع الكائنية (objectified methods). يستخدم الصنف Method لتمثيل التوابع المرتبطة بكائن معين، ويمكن إنشاء كائنات التوابع من هذا النوع عبر التابع Object.method.

تدعم روبي أيضًا التوابع الحرة (unbound methods)؛ وهي كائنات توابع غير مرتبطة بكائن معين. يمكن إنشاؤها إما عن طريق استدعاء Module.instance_method، أو عن طريق استدعاء unbind على تابع مرتبط (bound method object). نتيجة كليهما ستكون تابعًا حرًا (كائن من النوع UnboundMethod).

لا يمكن استدعاء التوابع الحرة إلا بعد ربطها بكائن ما. ويجب أن يعيد التعبير UnboundMethod.kind_of? A القيمة true، إذ A يمثل الصنف الأصلي للتابع.

class Square
  def area
    @side * @side
  end
  def initialize(side)
    @side = side
  end
end
area_un = Square.instance_method(:area)
s = Square.new(12)
area = area_un.bind(s)
area.call   #=> 144‎

التوابع الحرة ستكون مرجعًا للتوابع عند ربطها؛ ولن تؤثر التغييرات اللاحقة على الصنف الأساسي على التابع الحر.

class Test
  def test
    :original
  end
end
um = Test.instance_method(:test)
class Test
  def test
    :modified
  end
end
t = Test.new
t.test            #=> :modified
um.bind(t).call   #=> :original‎

توابع النسخة العامة

==

يتحقق من تساوي كائنين من النوع UnboundMethod.

arity

يعيد مؤشرًا لعدد الوسائط المقبولة من قبل تابع.

bind

يربط التابعَ الحرَّ الذي استُدعي معه بالكائن الذي مُرِّر إليه.

clone

يعيد نسخة من هذا التابع.

eql?‎

يتحقق من تساوي تابعين غير مربوطين.

hash

يعيد القيمة hash المقابلة للتابع الحر الذي استُدعي معه.

inspect

يعيد الاسم الأصلي (underlying method) للتابع الحر الذي استدعي معه.

name

يعيد اسم التابع الحر الذي استُدعي معه.

original_name

يعيد الاسم الأصلي التابع الحر الذي استُدعي معه.

owner

يعيد الصنف أو الوحدة (module) التي تعرف التابع الحر الذي استدعي معه.

parameters

يعيد معلومات عن معاملات التابع الحر الذي استُدعي معه على شكل مصفوفة.

source_location

يعيد اسم الملف المصدر لروبي ورقم السطر الذي يحتوي هذا التابع الحر، أو يعيد nil إن لم يُعرّف هذا التابع في روبي (أي أنه أصلي).

super_method

يعيد كائنًا من النوع Method للصنف الأب (superclass)، حتى يمكن استدعاؤه عند استخدام المتغير super، أو يعيد nil إن لم يكن هناك تابع في الصنف الأب.

to_s

يعيد  اسم التابع الأصلي (underlying method) للتابع الحر الذي استدعي معه.

مصادر