التابع const_missing‎ الخاص بالصنف Module في روبي

من موسوعة حسوب

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

مصادر