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

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

مراجعة 23:31، 26 أكتوبر 2018

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

def Foo.const_missing(name)
  name # return the constant name as Symbol
end

Foo::UNDEFINED_CONST    #=> :UNDEFINED_CONST: symbol returned

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

const_missing(sym)  obj

المعاملات

sym‎

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

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

يُستدعى التابع const_missing قيمة ليتم استخدامها بدل الثابت.

أمثلة

في المثال الموالي، عند محاولة الدخول إلى ثابت غير معرف، سيحاول التابع const_missing تحميل ملف اسمه هو اسم الثابت، لكن بحروف صغيرة، (مثلًا سيبحث عن الثابتة Fred في الملف fred.rb). إذا وجده، فسيعيد الصنف المحمل. حيث يقوم بتقديم (implements ) ميزة التحميل الذاتي (autoload) كما يفعل التابعان Kernel#autoload و 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: يضبط قيمة الثابت المعطى عند الكائن المحدد ،

مصادر