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

من موسوعة حسوب
< Ruby‏ | Module
لا ملخص تعديل
ط مراجعة وتدقيق.
 
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: التابع <code>const_missing‎</code> الخاص بالصنف <code>Module</code> في روبي}}</noinclude>
<noinclude>{{DISPLAYTITLE: التابع <code>Module.const_missing‎</code> في روبي}}</noinclude>
[[تصنيف: Ruby]]
[[تصنيف: Ruby]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Module]]
[[تصنيف: Ruby Module Class]]
يُستدعى التابع <code>const_missing</code> عند محاولة استخدام ثابت غير معرف في الوحدة. ويُمرّر إليه الوسيط <code>sym</code> (انظر فقرة البنية العامة) الذي يمثل الثابتة غير المعرفة، ويعيد قيمة ليتم استخدامها بدل ذلك الثابت. كما يوضح المثال التالي:<syntaxhighlight lang="ruby">
يُستدعَى التابع <code>const_missing</code> عند محاولة استخدام ثابت غير مُعرَّف في الوحدة. المعامل الوحيد المُمرَّر إليه يمثل الثابت غير المعرفة. ويعيد التابع قيمة ليتم استخدامها بدل ذلك الثابت كما يوضح المثال التالي:<syntaxhighlight lang="ruby">
def Foo.const_missing(name)
def Foo.const_missing(name)
   name # return the constant name as Symbol
   name # يعاد اسم الثابت كرمز
end
end


Foo::UNDEFINED_CONST    #=> :UNDEFINED_CONST: symbol returned
Foo::UNDEFINED_CONST    #=> :UNDEFINED_CONST: أعيد الرمز
</syntaxhighlight>
</syntaxhighlight>
==البنية العامة==
==البنية العامة==
<syntaxhighlight lang="ruby">const_missing(sym) → obj‎</syntaxhighlight>
<syntaxhighlight lang="ruby">const_missing(sym) → obj‎</syntaxhighlight>
==المعاملات==
==المعاملات==
===<code>sym‎</code>===
===<code>sym‎</code>===
 
[[Ruby/Symbol|رمز]] يمثل الثابتة.
رمز يمثل الثابتة.
==القيمة المعادة==
==القيمة المُعادة==
تعاد قيمةٌ ليتم استخدامها بدل الثابت.
يُستدعى التابع <code>const_missing</code> قيمة ليتم استخدامها بدل الثابت.
 
==أمثلة==
==أمثلة==
في المثال الموالي، عند محاولة الدخول إلى ثابت غير معرف، سيحاول  التابع <code>const_missing</code>  تحميل ملف اسمه هو اسم الثابت، لكن بحروف صغيرة، (مثلًا سيبحث عن الثابتة <code>Fred</code> في الملف <code>fred.rb</code>).  إذا وجده، فسيعيد الصنف المحمل. حيث يقوم بتقديم (implements ) ميزة التحميل الذاتي (autoload) كما يفعل التابعان <code>[[Ruby/Kernel/autoload|Kernel#autoload]]</code> و <code>[[Ruby/Module/autoload|autoload]]</code>.<syntaxhighlight lang="ruby">
في المثال التالي، عند محاولة الدخول إلى ثابت غير معرَّف، سيحاول  التابع <code>const_missing</code>  تحميل ملفٍ اسمه هو اسم الثابت، لكن بحروف صغيرة (مثلًا سيبحث عن الثابت <code>Fred</code> في الملف <code>fred.rb</code>).  إذا وجده، فسيعيد الصنف المحمل، إذ يعمل على تقديم (implements) ميزة [[Ruby/Module/autoload|التحميل التلقائي]] (autoload) كما يفعل التابعان <code>[[Ruby/Kernel/autoload|Kernel.autoload]]</code> و <code>[[Ruby/Module/autoload|Module.autoload]]</code>.<syntaxhighlight lang="ruby">
def Object.const_missing(name)
def Object.const_missing(name)
   @looked_for ||= {}
   @looked_for ||= {}
سطر 35: سطر 32:
</syntaxhighlight>
</syntaxhighlight>
==انظر أيضا==
==انظر أيضا==
* التابع <code>[[Ruby/Module/const_get|const_get]]</code>: يتحقق من وجود ثابت بالاسم المحدد في الوحدة .
*التابع <code>[[Ruby/Module/const get|const_get]]</code>: يتحقق من وجود ثابت بالاسم المحدد في الوحدة.
* التابع <code>[[Ruby/Module/const_set|const_set]]</code>: يضبط قيمة الثابت المعطى عند الكائن المحدد ،
*التابع <code>[[Ruby/Module/const set|const_set]]</code>: يضبط قيمة الثابت المعطى عند الكائن المحدد.
 
==مصادر==
==مصادر==
*[http://ruby-doc.org/core-2.5.1/Module.html#method-i-const_missing قسم التابع const_missing‎ في الصنف Module‎ في توثيق روبي الرسمي.]
*[http://ruby-doc.org/core-2.5.1/Module.html#method-i-const_missing قسم التابع const_missing‎ في الصنف Module‎ في توثيق روبي الرسمي.]

المراجعة الحالية بتاريخ 11:50، 19 نوفمبر 2018

يُستدعَى التابع const_missing عند محاولة استخدام ثابت غير مُعرَّف في الوحدة. المعامل الوحيد المُمرَّر إليه يمثل الثابت غير المعرفة. ويعيد التابع قيمة ليتم استخدامها بدل ذلك الثابت كما يوضح المثال التالي:

def Foo.const_missing(name)
  name # يعاد اسم الثابت كرمز
end

Foo::UNDEFINED_CONST    #=> :UNDEFINED_CONST: أعيد الرمز

البنية العامة

const_missing(sym)  obj

المعاملات

sym‎

رمز يمثل الثابتة.

القيمة المعادة

تعاد قيمةٌ ليتم استخدامها بدل الثابت.

أمثلة

في المثال التالي، عند محاولة الدخول إلى ثابت غير معرَّف، سيحاول التابع const_missing تحميل ملفٍ اسمه هو اسم الثابت، لكن بحروف صغيرة (مثلًا سيبحث عن الثابت Fred في الملف fred.rb). إذا وجده، فسيعيد الصنف المحمل، إذ يعمل على تقديم (implements) ميزة التحميل التلقائي (autoload) كما يفعل التابعان Kernel.autoload و Module.autoload.

def Object.const_missing(name)
  @looked_for ||= {}
  str_name = name.to_s
  raise "Class not found: #{name}" if @looked_for[str_name]
  @looked_for[str_name] = 1
  file = str_name.downcase
  require file
  klass = const_get(name)
  return klass if klass
  raise "Class not found: #{name}"
end

انظر أيضا

  • التابع const_get: يتحقق من وجود ثابت بالاسم المحدد في الوحدة.
  • التابع const_set: يضبط قيمة الثابت المعطى عند الكائن المحدد.

مصادر