صفحة الصنف UnboundMethod
في روبي
روبي تدعم شكلين من التوابع الكائنية (objectified methods). يستخدم الصنف Class
Method
لتمثيل التوابع المرتبطة بكائن معين، يمكن إنشاء كائنات التوابع من هذا النوع عبر Object#method
.
تدعم روبي أيضًا التوابع الحرة؛ وهي كائنات توابع غير مرتبطة بكائن معين. يمكن إنشاؤها إما عن طريق استدعاء Module#instance_method
، أو عن طريق استدعاء unbind
على تابع مرتبط. نتيجة كليهما هي تابع حر UnboundMethod
.
لا يمكن استدعاء التوابع الحرة إلا بعد أن ربطها بكائن ما. يجب أن يعيد هذا الكائن القيمة true غند استدعاء التابع kind_of؟ معه. b.is_a? 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
توابع الصنف العامة (Public Class Methods)
التابع ==
يكون كائنان من النوع UnboundMethod متساويين إن كانا مرتبطين بنفس الكائن، وكانا يشيران إلى نفس تعريف التابع، وكان لهما نفس الصنف أو الوحد المالكة.
التابع arity
يعيد التابع arity
مؤشرا لعدد الوسائط المقبولة من قبل التابع. يعيد عددًا صحيحًا غير سالب للتوابع التي تأخذ عددًا محددًا من الوسائطا. بالنسبة لتوابع روبي التي تأخذ عددًا متغيرًا من الوسائط، يًعاد العدد -n-1، حيث n هو عدد الوسائط المطلوبة. الوسائط المسماة (Keyword arguments) ستُعد وسيطاً إضافيًا واحدًا، وسيكون ذلك الوسيط إلزاميا إن كان أيٌّ من الوسائط المسماة كذلك. بالنسبة للتوابع المكتوبة بلغة C، سيُعاد العدد -1 إن كانت استدعاء تلك التوابع يأخذ عددًا متغيرًا من الوسائط.
التابع bind
يربط التابع bind
التابع الحر umeth
بالكائن obj
(انظر فقرة البنية العامة). إذا كان Klass
هو الصنف الذي استُنسخ منه التابع الحر umeth
، فيجب أن يساوي التعبير obj.kind_of?(Klass)
القيمة true.
التابع clone
يعيد التابع clone
نسخة من هذا التابع.
التابع eql?
يكون كائنان من النوع UnboundMethod متساويتين إذا كانا مرتبطين بنفس الكائن، ويرجعان إلى نفس التعريف، وكانا مملوكين من قبل نفس الصنف أو الوحدة.
التابع hash
يعيد التابع hash
رمز التكويد (hash) المقابل التابع الحر الذي استُدعي معه.
التابع inspect
يعيد التابع inspect
اسم التابع الأصلي (underlying method).
التابع name
يعيد التابع name
اسم التابع.
التابع original_name
يعيد التابع original_name
الاسم الأصلي التابع الحر الذي استُدعي معه.
التابع owner
يعيد التابع owner
الصنف أو الوحدة (module) التي تعرف التابع الحر.
التابع parameters
يعيد التابع parameters
معلومات عن وسائط التابع الحر الذي استُدعي معه.
التابع source_location
يعيد التابع source_location
اسم الملف المصدر لروبي ورقم السطر الذي يحتوي هذا التابع، أو يعيد nil إن لم يُعرّف هذا التابع في روبي (أي أنه أصلي).
التابع super_method
يعيد التابع super_method
كائنا من النوع Method
للصنف الأب (superclass)، حتى يمكن استدعاؤه عند استخدام super، أو يعيد nil إن لم يكن هناك تابع في الصنف الأب.
التابع to_s
يعيد التابع to_s
الاسم الأصلي التابع الحر (underlying method).