الصنف 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) للتابع الحر الذي استدعي معه.