الفرق بين المراجعتين لصفحة: «Ruby/UnboundMethod»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق. |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: | <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>. | ||
تدعم روبي أيضًا التوابع الحرة (unbound methods)؛ وهي كائنات توابع غير مرتبطة بكائن معين. يمكن إنشاؤها إما عن طريق استدعاء <code>[[Ruby/Module/instance method|Module | تدعم روبي أيضًا التوابع الحرة (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>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>التوابع الحرة ستكون مرجعًا للتوابع عند | 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> | ||
==توابع النسخة العامة | ==توابع النسخة العامة== | ||
===[[Ruby/UnboundMethod/equality operator| | ===[[Ruby/UnboundMethod/equality operator|<code>==</code>]]=== | ||
يتحقق من تساوي كائنين من النوع <code>UnboundMethod</code>. | |||
===[[Ruby/UnboundMethod/arity| | ===[[Ruby/UnboundMethod/arity|<code>arity</code>]]=== | ||
يعيد | يعيد مؤشرًا لعدد الوسائط المقبولة من قبل تابع. | ||
===[[Ruby/UnboundMethod/bind| | ===[[Ruby/UnboundMethod/bind|<code>bind</code>]]=== | ||
يربط التابعَ الحرَّ الذي استُدعي معه بالكائن الذي مُرِّر إليه. | |||
===[[Ruby/UnboundMethod/clone| | ===[[Ruby/UnboundMethod/clone|<code>clone</code>]]=== | ||
يعيد | يعيد نسخة من هذا التابع. | ||
===[[Ruby/UnboundMethod/eql-3F| | ===[[Ruby/UnboundMethod/eql-3F|<code>eql?</code>]]=== | ||
يتحقق من تساوي تابعين. | يتحقق من تساوي تابعين غير مربوطين. | ||
===[[Ruby/UnboundMethod/hash| | ===[[Ruby/UnboundMethod/hash|<code>hash</code>]]=== | ||
يعيد القيمة hash المقابلة للتابع الحر الذي استُدعي معه. | |||
===[[Ruby/UnboundMethod/inspect| | ===[[Ruby/UnboundMethod/inspect|<code>inspect</code>]]=== | ||
يعيد | يعيد الاسم الأصلي (underlying method) للتابع الحر الذي استدعي معه. | ||
===[[Ruby/UnboundMethod/name| | ===[[Ruby/UnboundMethod/name|<code>name</code>]]=== | ||
يعيد | يعيد اسم التابع الحر الذي استُدعي معه. | ||
===[[Ruby/UnboundMethod/original name| | ===[[Ruby/UnboundMethod/original name|<code>original_name</code>]]=== | ||
يعيد الاسم الأصلي التابع الحر الذي استُدعي معه. | |||
===[[Ruby/UnboundMethod/owner| | ===[[Ruby/UnboundMethod/owner|<code>owner</code>]]=== | ||
يعيد | يعيد الصنف أو الوحدة (module) التي تعرف التابع الحر الذي استدعي معه. | ||
===[[Ruby/UnboundMethod/parameters| | ===[[Ruby/UnboundMethod/parameters|<code>parameters</code>]]=== | ||
يعيد | يعيد معلومات عن معاملات التابع الحر الذي استُدعي معه على شكل مصفوفة. | ||
===[[Ruby/UnboundMethod/source location| | ===[[Ruby/UnboundMethod/source location|<code>source_location</code>]]=== | ||
يعيد | يعيد اسم الملف المصدر لروبي ورقم السطر الذي يحتوي هذا التابع الحر، أو يعيد <code>nil</code> إن لم يُعرّف هذا التابع في روبي (أي أنه أصلي). | ||
===[[Ruby/UnboundMethod/super method| | ===[[Ruby/UnboundMethod/super method|<code>super_method</code>]]=== | ||
يعيد | يعيد كائنًا من النوع <code>[[Ruby/Method|Method]]</code> للصنف الأب (superclass)، حتى يمكن استدعاؤه عند استخدام المتغير <code>super</code>، أو يعيد <code>nil</code> إن لم يكن هناك تابع في الصنف الأب. | ||
===[[Ruby/UnboundMethod/to s| | ===[[Ruby/UnboundMethod/to s|<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 في توثيق روبي الرسمي.] |
المراجعة الحالية بتاريخ 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) للتابع الحر الذي استدعي معه.