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

من موسوعة حسوب
مراجعة 11:34، 8 نوفمبر 2018 بواسطة محمد-بغات (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>UnboundMethod</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف: Ruby 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).

مصادر