التابع Module.const_missing‎ في روبي

من موسوعة حسوب
< Ruby‏ | 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: يضبط قيمة الثابت المعطى عند الكائن المحدد.

مصادر