الفرق بين المراجعتين ل"Ruby/Module/const missing"

من موسوعة حسوب
< Ruby‏ | Module
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>const_missing‎</code> الخاص بالصنف <code>Module</code> في روبي}}</noinclude> تصنيف: Ruby ...')
 
ط (مراجعة وتدقيق.)
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 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> عند محاولة استخدام ثابت غير معرف في الوحدة. يُمرّر إليه رمز sym الذي استُدعي معه يمثل الثابتة غير المعرفة، ويعيد قيمة ليتم استخدامها بدل ذلك الثابت. الشيفرة التالية مثال على ذلك:
+
يُستدعَى التابع <code>const_missing</code> عند محاولة استخدام ثابت غير مُعرَّف في الوحدة. المعامل الوحيد المُمرَّر إليه يمثل الثابت غير المعرفة. ويعيد التابع قيمة ليتم استخدامها بدل ذلك الثابت كما يوضح المثال التالي:<syntaxhighlight lang="ruby">
 +
def Foo.const_missing(name)
 +
  name # يعاد اسم الثابت كرمز
 +
end
  
في المثال التالي عند محاولة الدخول إلى ثابت غير معرف، فسيحاول تحميل ملف اسمه هو اسم الثابت بحروف صغيرة، (أي يُفترض أن تكون الثابتة <code>Fred</code> في الملف <code>fred.rb</code>).  إذا وجدتها، فستعيد الصنف المحمل. حيث يقوم بتقيدم ميزة التحميل الذاتي (autoload) مشابهة لـ <code>Kernel#autoload</code> و <code>#autoload</code>.
+
Foo::UNDEFINED_CONST    #=> :UNDEFINED_CONST: أعيد الرمز
 +
</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) ميزة [[Ruby/Module/autoload|التحميل التلقائي]] (autoload) كما يفعل التابعان <code>[[Ruby/Kernel/autoload|Kernel.autoload]]</code> و <code>[[Ruby/Module/autoload|Module.autoload]]</code>.<syntaxhighlight lang="ruby">
<syntaxhighlight lang="ruby">def Foo.const_missing(name)
+
def Object.const_missing(name)
   name # return the constant name as Symbol
+
   @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
 
end
Foo::UNDEFINED_CONST    #=> :UNDEFINED_CONST: symbol returned‎</syntaxhighlight>
+
</syntaxhighlight>
 
==انظر أيضا==
 
==انظر أيضا==
* التابع <code>[[Ruby/Module/const_get|const_get]]</code>: يتحقق من وجود ثابت بالاسم المحدد في الوحدة . في حال تعيين <code>inherit</code>، فسيشمل البحث الأسلاف أيضًا (وكذلك <code>Object</code> إن كانت الوحدة من النوع <code>Module</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: يضبط قيمة الثابت المعطى عند الكائن المحدد.

مصادر