الفرق بين المراجعتين لصفحة: «Ruby/UnboundMethod»

من موسوعة حسوب
لا ملخص تعديل
ط مراجعة وتدقيق.
 
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>UnboundMethod</code> في روبي}}</noinclude>
<noinclude>{{DISPLAYTITLE: الصنف <code>UnboundMethod</code> في روبي}}</noinclude>
[[تصنيف: Ruby]]
[[تصنيف: Ruby]]
[[تصنيف: Ruby Class]]
[[تصنيف: Ruby UnboundMethod]]
[[تصنيف: Ruby UnboundMethod]]
روبي تدعم شكلين من التوابع الكائنية (objectified methods). يستخدم [[Ruby/Class|الصنف]] <code>Method</code> لتمثيل التوابع المرتبطة بكائن معين، يمكن إنشاء كائنات التوابع من هذا النوع عبر <code>[[Ruby/Object/method|Object#method]]</code>.
تدعم روبي شكلين من التوابع الكائنية (objectified methods). يستخدم [[Ruby/Class|الصنف]] <code>Method</code> لتمثيل التوابع المرتبطة بكائن معين، ويمكن إنشاء كائنات التوابع من هذا النوع عبر التابع <code>[[Ruby/Object/method|Object.method]]</code>.


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


لا يمكن استدعاء التوابع الحرة إلا بعد ربطها بكائن ما. ويجب أن يعيد التعبير <code>UnboundMethod.kind_of? A</code> القيمة <code>true</code>،  حيث <code>A</code> يمثل الصنف الأصلي للتابع.<syntaxhighlight lang="ruby">class Square
لا يمكن استدعاء التوابع الحرة إلا بعد ربطها بكائن ما. ويجب أن يعيد التعبير <code>UnboundMethod.kind_of? A</code> القيمة <code>true</code>،  إذ <code>A</code> يمثل الصنف الأصلي للتابع.<syntaxhighlight lang="ruby">class Square
   def area
   def area
     @side * @side
     @side * @side
سطر 17: سطر 18:
s = Square.new(12)
s = Square.new(12)
area = area_un.bind(s)
area = area_un.bind(s)
area.call  #=> 144‎</syntaxhighlight>التوابع الحرة ستكون مرجعًا للتوابع عند ربطها: لن تؤثر التغييرات اللاحقة على الصنف الأساسي على التابع الحر.<syntaxhighlight lang="ruby">class Test
area.call  #=> 144‎</syntaxhighlight>التوابع الحرة ستكون مرجعًا للتوابع عند ربطها؛ ولن تؤثر التغييرات اللاحقة على الصنف الأساسي على التابع الحر.<syntaxhighlight lang="ruby">class Test
   def test
   def test
     :original
     :original
سطر 31: سطر 32:
t.test            #=> :modified
t.test            #=> :modified
um.bind(t).call  #=> :original‎</syntaxhighlight>
um.bind(t).call  #=> :original‎</syntaxhighlight>
==توابع النسخة العامة (Public Instance Methods)==
==توابع النسخة العامة==
===[[Ruby/UnboundMethod/equality operator| التابع ==]]===
===[[Ruby/UnboundMethod/equality operator|<code>==</code>]]===
معامل التساوي.
يتحقق من تساوي كائنين من النوع <code>UnboundMethod</code>.
===[[Ruby/UnboundMethod/arity| التابع arity]]===
===[[Ruby/UnboundMethod/arity|<code>arity</code>]]===
يعيد معامل الرتبة arity مؤشرا لعدد الوسائط المقبولة من قبل التابع.
يعيد مؤشرًا لعدد الوسائط المقبولة من قبل تابع.
===[[Ruby/UnboundMethod/bind| التابع bind]]===
===[[Ruby/UnboundMethod/bind|<code>bind</code>]]===
يربط التابع <code>bind</code> [[Ruby/UnboundMethod|التابع الحر]] بالكائن المعطى.
يربط التابعَ الحرَّ الذي استُدعي معه بالكائن الذي مُرِّر إليه.
===[[Ruby/UnboundMethod/clone| التابع clone]]===
===[[Ruby/UnboundMethod/clone|<code>clone</code>]]===
يعيد التابع <code>clone</code> نسخة من هذا التابع.
يعيد نسخة من هذا التابع.
===[[Ruby/UnboundMethod/eql-3F| التابع eql?‎]]===
===[[Ruby/UnboundMethod/eql-3F|<code>eql?‎</code>]]===
يتحقق من تساوي تابعين.
يتحقق من تساوي تابعين غير مربوطين.
===[[Ruby/UnboundMethod/hash| التابع hash]]===
===[[Ruby/UnboundMethod/hash|<code>hash</code>]]===
يعيد التابع <code>hash</code> رمز التكويد (hash) المقابل [[Ruby/UnboundMethod|التابع الحر]] الذي استُدعي معه.
يعيد القيمة hash المقابلة للتابع الحر الذي استُدعي معه.
===[[Ruby/UnboundMethod/inspect| التابع inspect]]===
===[[Ruby/UnboundMethod/inspect|<code>inspect</code>]]===
يعيد التابع <code>inspect</code> اسم التابع الأصلي (underlying method).
يعيد الاسم الأصلي (underlying method) للتابع الحر الذي استدعي معه.
===[[Ruby/UnboundMethod/name| التابع name]]===
===[[Ruby/UnboundMethod/name|<code>name</code>]]===
يعيد التابع <code>name</code> اسم التابع.
يعيد اسم التابع الحر الذي استُدعي معه.
===[[Ruby/UnboundMethod/original name| التابع original_name]]===
===[[Ruby/UnboundMethod/original name|<code>original_name</code>]]===
يعيد التابع <code>original_name</code> الاسم الأصلي [[Ruby/UnboundMethod|التابع الحر]] الذي استُدعي معه.
يعيد الاسم الأصلي التابع الحر الذي استُدعي معه.
===[[Ruby/UnboundMethod/owner| التابع owner]]===
===[[Ruby/UnboundMethod/owner|<code>owner</code>]]===
يعيد التابع <code>owner</code> الصنف أو الوحدة (module) التي تعرف [[Ruby/UnboundMethod|التابع الحر]].
يعيد الصنف أو الوحدة (module) التي تعرف التابع الحر الذي استدعي معه.
===[[Ruby/UnboundMethod/parameters| التابع parameters]]===
===[[Ruby/UnboundMethod/parameters|<code>parameters</code>]]===
يعيد التابع <code>parameters</code> معلومات عن وسائط [[Ruby/UnboundMethod|التابع الحر]] الذي استُدعي معه.
يعيد معلومات عن معاملات التابع الحر الذي استُدعي معه على شكل مصفوفة.
===[[Ruby/UnboundMethod/source location| التابع source_location]]===
===[[Ruby/UnboundMethod/source location|<code>source_location</code>]]===
يعيد التابع <code>source_location</code> اسم الملف المصدر لروبي ورقم السطر الذي يحتوي هذا التابع.
يعيد اسم الملف المصدر لروبي ورقم السطر الذي يحتوي هذا التابع الحر، أو يعيد <code>nil</code> إن لم يُعرّف هذا التابع في روبي (أي أنه أصلي).
===[[Ruby/UnboundMethod/super method| التابع super_method]]===
===[[Ruby/UnboundMethod/super method|<code>super_method</code>]]===
يعيد التابع <code>super_method</code> كائنا من النوع <code>[[Ruby/Method|Method]]</code> للصنف الأب (superclass)، حتى يمكن استدعاؤه عند استخدام <code>super</code>.
يعيد كائنًا من النوع <code>[[Ruby/Method|Method]]</code> للصنف الأب (superclass)، حتى يمكن استدعاؤه عند استخدام المتغير <code>super</code>، أو يعيد <code>nil</code> إن لم يكن هناك تابع في الصنف الأب.
===[[Ruby/UnboundMethod/to s| التابع to_s]]===
===[[Ruby/UnboundMethod/to s|<code>to_s</code>]]===
يعيد <code>to_s</code> اسم التابع الأصلي (underlying method).
يعيد  اسم التابع الأصلي (underlying method) للتابع الحر الذي استدعي معه.
==مصادر==
==مصادر==
*[http://ruby-doc.org/core-2.5.1/UnboundMethod.html قسم  الصنف UnboundMethod في توثيق روبي الرسمي.]
*[http://ruby-doc.org/core-2.5.1/UnboundMethod.html قسم  الصنف UnboundMethod في توثيق روبي الرسمي.]

المراجعة الحالية بتاريخ 07:35، 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‎

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

==

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

مصادر