الفرق بين المراجعتين ل"Ruby/UnboundMethod"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>UnboundMethod</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف: Ruby UnboundMethodروبي ت...')
 
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>UnboundMethod</code> في روبي}}</noinclude>
 
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>UnboundMethod</code> في روبي}}</noinclude>
 
[[تصنيف: Ruby]]
 
[[تصنيف: Ruby]]
[[تصنيف: Ruby UnboundMethod]]روبي تدعم شكلين من التوابع الكائنية (objectified methods). يستخدم الصنف <code>[[Ruby/Class|Class]]</code> <code>Method</code> لتمثيل التوابع المرتبطة بكائن معين، يمكن إنشاء كائنات التوابع من هذا النوع عبر <code>Object#method</code>.
+
[[تصنيف: Ruby UnboundMethod]]
 +
روبي تدعم شكلين من التوابع الكائنية (objectified methods). يستخدم [[Ruby/Class|الصنف]] <code>Method</code> لتمثيل التوابع المرتبطة بكائن معين، يمكن إنشاء كائنات التوابع من هذا النوع عبر <code>[[Ruby/Object/method|Object#method]]</code>.
  
تدعم روبي أيضًا التوابع الحرة؛ وهي كائنات توابع غير مرتبطة بكائن معين. يمكن إنشاؤها إما عن طريق استدعاء <code>Module#instance_method</code>، أو عن طريق استدعاء <code>unbind</code> على تابع مرتبط. نتيجة كليهما هي تابع حر <code>UnboundMethod</code>.
+
تدعم روبي أيضًا التوابع الحرة (unbound methods)؛ وهي كائنات توابع غير مرتبطة بكائن معين. يمكن إنشاؤها إما عن طريق استدعاء <code>[[Ruby/Module/instance method|Module#instance_method]]</code>، أو عن طريق استدعاء <code>unbind</code> على تابع مرتبط (bound method object). نتيجة كليهما ستكون تابعا حرا (<code>UnboundMethod</code>).
  
لا يمكن استدعاء التوابع الحرة إلا بعد أن ربطها بكائن ما. يجب أن يعيد هذا الكائن القيمة true غند استدعاء التابع kind_of؟ معه. b.is_a? A الصنف الأصلي للتابع.
+
لا يمكن استدعاء التوابع الحرة إلا بعد ربطها بكائن ما. ويجب أن يعيد التعبير <code>UnboundMethod.kind_of? A</code> القيمة <code>true</code>،  حيث <code>A</code> يمثل الصنف الأصلي للتابع.<syntaxhighlight lang="ruby">class Square
<syntaxhighlight lang="ruby">class Square
 
 
   def area
 
   def area
 
     @side * @side
 
     @side * @side
سطر 17: سطر 17:
 
s = Square.new(12)
 
s = Square.new(12)
 
area = area_un.bind(s)
 
area = area_un.bind(s)
area.call  #=> 144‎</syntaxhighlight>  
+
area.call  #=> 144‎</syntaxhighlight>التوابع الحرة ستكون مرجعًا للتوابع عند ربطها: لن تؤثر التغييرات اللاحقة على الصنف الأساسي على التابع الحر.<syntaxhighlight lang="ruby">class Test
التوابع الحرة ستكون مرجعًا للتوابع عند ربطها: لن تؤثر التغييرات اللاحقة على الصنف الأساسي على التابع الحر.
 
<syntaxhighlight lang="ruby">class Test
 
 
   def test
 
   def test
 
     :original
 
     :original
سطر 33: سطر 31:
 
t.test            #=> :modified
 
t.test            #=> :modified
 
um.bind(t).call  #=> :original‎</syntaxhighlight>
 
um.bind(t).call  #=> :original‎</syntaxhighlight>
==توابع الصنف العامة (Public Class Methods)==
+
==توابع النسخة العامة (Public Instance Methods)==
===[[Ruby/UnboundMethod/equality_operator | التابع ==]]===
+
===[[Ruby/UnboundMethod/equality operator| التابع ==]]===
يكون كائنان من النوع UnboundMethod متساويين إن كانا مرتبطين بنفس الكائن، وكانا يشيران إلى نفس تعريف التابع، وكان لهما نفس الصنف أو الوحد المالكة.
+
معامل التساوي.
===[[Ruby/UnboundMethod/arity | التابع arity]]===
+
===[[Ruby/UnboundMethod/arity| التابع arity]]===
يعيد التابع <code>arity</code> مؤشرا لعدد الوسائط المقبولة من قبل التابع. يعيد عددًا صحيحًا غير سالب للتوابع التي تأخذ عددًا محددًا من الوسائطا. بالنسبة لتوابع روبي التي تأخذ عددًا متغيرًا من الوسائط، يًعاد العدد -n-1، حيث n هو عدد الوسائط المطلوبة. الوسائط المسماة (Keyword arguments) ستُعد وسيطاً إضافيًا واحدًا، وسيكون ذلك الوسيط إلزاميا إن كان أيٌّ من الوسائط المسماة كذلك. بالنسبة للتوابع المكتوبة بلغة C، سيُعاد العدد -1 إن كانت استدعاء تلك التوابع يأخذ عددًا متغيرًا من الوسائط.
+
يعيد معامل الرتبة arity مؤشرا لعدد الوسائط المقبولة من قبل التابع.
===[[Ruby/UnboundMethod/bind | التابع bind]]===
+
===[[Ruby/UnboundMethod/bind| التابع bind]]===
يربط التابع <code>bind</code> [[Ruby/UnboundMethod|التابع الحر]] <code>umeth</code> بالكائن <code>obj</code> (انظر فقرة البنية العامة). إذا كان <code>Klass</code> هو الصنف الذي استُنسخ منه [[Ruby/UnboundMethod|التابع الحر]] <code>umeth</code>، فيجب أن يساوي التعبير <code>obj.kind_of?(Klass)</code> القيمة true.
+
يربط التابع <code>bind</code> [[Ruby/UnboundMethod|التابع الحر]] بالكائن المعطى.
===[[Ruby/UnboundMethod/clone | التابع clone]]===
+
===[[Ruby/UnboundMethod/clone| التابع clone]]===
 
يعيد التابع <code>clone</code> نسخة من هذا التابع.
 
يعيد التابع <code>clone</code> نسخة من هذا التابع.
===[[Ruby/UnboundMethod/eql-3F | التابع eql?‎]]===
+
===[[Ruby/UnboundMethod/eql-3F| التابع eql?‎]]===
يكون كائنان من النوع UnboundMethod متساويتين إذا كانا مرتبطين بنفس الكائن، ويرجعان إلى نفس التعريف، وكانا مملوكين من قبل نفس الصنف أو الوحدة.
+
يتحقق من تساوي تابعين.
===[[Ruby/UnboundMethod/hash | التابع hash]]===
+
===[[Ruby/UnboundMethod/hash| التابع hash]]===
 
يعيد التابع <code>hash</code> رمز التكويد (hash) المقابل [[Ruby/UnboundMethod|التابع الحر]] الذي استُدعي معه.
 
يعيد التابع <code>hash</code> رمز التكويد (hash) المقابل [[Ruby/UnboundMethod|التابع الحر]] الذي استُدعي معه.
===[[Ruby/UnboundMethod/inspect | التابع inspect]]===
+
===[[Ruby/UnboundMethod/inspect| التابع inspect]]===
 
يعيد التابع <code>inspect</code> اسم التابع الأصلي (underlying method).
 
يعيد التابع <code>inspect</code> اسم التابع الأصلي (underlying method).
===[[Ruby/UnboundMethod/name | التابع name]]===
+
===[[Ruby/UnboundMethod/name| التابع name]]===
 
يعيد التابع <code>name</code> اسم التابع.
 
يعيد التابع <code>name</code> اسم التابع.
===[[Ruby/UnboundMethod/original_name | التابع original_name]]===
+
===[[Ruby/UnboundMethod/original name| التابع original_name]]===
 
يعيد التابع <code>original_name</code> الاسم الأصلي [[Ruby/UnboundMethod|التابع الحر]] الذي استُدعي معه.
 
يعيد التابع <code>original_name</code> الاسم الأصلي [[Ruby/UnboundMethod|التابع الحر]] الذي استُدعي معه.
===[[Ruby/UnboundMethod/owner | التابع owner]]===
+
===[[Ruby/UnboundMethod/owner| التابع owner]]===
 
يعيد التابع <code>owner</code> الصنف أو الوحدة (module) التي تعرف [[Ruby/UnboundMethod|التابع الحر]].
 
يعيد التابع <code>owner</code> الصنف أو الوحدة (module) التي تعرف [[Ruby/UnboundMethod|التابع الحر]].
===[[Ruby/UnboundMethod/parameters | التابع parameters]]===
+
===[[Ruby/UnboundMethod/parameters| التابع parameters]]===
 
يعيد التابع <code>parameters</code> معلومات عن وسائط [[Ruby/UnboundMethod|التابع الحر]] الذي استُدعي معه.
 
يعيد التابع <code>parameters</code> معلومات عن وسائط [[Ruby/UnboundMethod|التابع الحر]] الذي استُدعي معه.
===[[Ruby/UnboundMethod/source_location | التابع source_location]]===
+
===[[Ruby/UnboundMethod/source location| التابع source_location]]===
يعيد التابع <code>source_location</code> اسم الملف المصدر لروبي ورقم السطر الذي يحتوي هذا التابع، أو يعيد nil إن لم يُعرّف هذا التابع في روبي (أي أنه أصلي).
+
يعيد التابع <code>source_location</code> اسم الملف المصدر لروبي ورقم السطر الذي يحتوي هذا التابع.
===[[Ruby/UnboundMethod/super_method | التابع super_method]]===
+
===[[Ruby/UnboundMethod/super method| التابع super_method]]===
يعيد التابع <code>super_method</code> كائنا من النوع <code>[[Ruby/Method|Method]]</code> للصنف الأب (superclass)، حتى يمكن استدعاؤه عند استخدام super، أو يعيد nil إن لم يكن هناك تابع في الصنف الأب.
+
يعيد التابع <code>super_method</code> كائنا من النوع <code>[[Ruby/Method|Method]]</code> للصنف الأب (superclass)، حتى يمكن استدعاؤه عند استخدام <code>super</code>.
===[[Ruby/UnboundMethod/to_s | التابع to_s]]===
+
===[[Ruby/UnboundMethod/to s| التابع to_s]]===
يعيد التابع <code>to_s</code> الاسم الأصلي [[Ruby/UnboundMethod|التابع الحر]] (underlying method).
+
يعيد <code>to_s</code> اسم التابع الأصلي (underlying method).
 
==مصادر==
 
==مصادر==
 
*[http://ruby-doc.org/core-2.5.1/UnboundMethod.html قسم  الصنف UnboundMethod في توثيق روبي الرسمي.]
 
*[http://ruby-doc.org/core-2.5.1/UnboundMethod.html قسم  الصنف UnboundMethod في توثيق روبي الرسمي.]

مراجعة 11:44، 8 نوفمبر 2018

روبي تدعم شكلين من التوابع الكائنية (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‎

توابع النسخة العامة (Public Instance Methods)

التابع ==

معامل التساوي.

التابع arity

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

التابع bind

يربط التابع bind التابع الحر بالكائن المعطى.

التابع clone

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

التابع eql?‎

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

التابع hash

يعيد التابع hash رمز التكويد (hash) المقابل التابع الحر الذي استُدعي معه.

التابع inspect

يعيد التابع inspect اسم التابع الأصلي (underlying method).

التابع name

يعيد التابع name اسم التابع.

التابع original_name

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

التابع owner

يعيد التابع owner الصنف أو الوحدة (module) التي تعرف التابع الحر.

التابع parameters

يعيد التابع parameters معلومات عن وسائط التابع الحر الذي استُدعي معه.

التابع source_location

يعيد التابع source_location اسم الملف المصدر لروبي ورقم السطر الذي يحتوي هذا التابع.

التابع super_method

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

التابع to_s

يعيد to_s اسم التابع الأصلي (underlying method).

مصادر