التابع Module.const_defined?
في روبي
يتحقق التابع const_defined?
مما إذا كانت الوحدة التي استُدعي معها أو أحد أسلافها (ancestors) تحوي الثابت المعطى.
Float.const_defined?(:EPSILON) #=> true, found in Float itself
Float.const_defined?("String") #=> true, found in Object (ancestor)
BasicObject.const_defined?(:Hash) #=> false
إذا كانت الوحدة من النوع Module
، فسيتم إضافة إلى ذلك فحص Object
وكذلك أسلافه.
Math.const_defined?(:String) #=> true, found in Object
في كل الأصناف أو الوحدات المفحوصة، إذا لم يكن الثابت موجودًا وكان التحميل التلقائي (autoload) مفعلًا له، فسيتم إعادة القيمة true
مباشرةً دون تحميل تلقائي:
module Admin
autoload :User, 'admin/user'
end
Admin.const_defined?(:User) #=> true
إذا لم يتم العثور على الثابت، فلن يُستدعى التابع const_missing
، وسيعيد التابع const_defined?
القيمة false
.
إن أُعطي المعامل inherit
القيمة false
، فسينحصر البحث عن الثوابت في المستقبِل (receiver):
IO.const_defined?(:SYNC) #=> true, found in File::Constants (ancestor)
IO.const_defined?(:SYNC, false) #=> false, not found in IO itself
في هذه الحالة، سيُطبَّق نفس منطق التحميل التلقائي.
إذا كان المعامل المعطى اسم ثابت غير صالح، فسيُطلق الخطأ NameError
مع الرسالة "wrong constant name name":
Hash.const_defined? 'foobar' #=> NameError: wrong constant name foobar
البنية العامة
const_defined?(sym, inherit=true)→ true or false
const_defined?(str, inherit=true)→ true or false
المعاملات
sym
رمز يمثل الثابت.
inherit
إن كانت قيمته false
، فسينحصر البحث عن الثوابت في المستقبِل (receiver).
str
سلسلة نصية تمثل الثابت.
القيمة المعادة
تعاد القيمة true
إذا كانت الوحدة التي استُدعي معها أو أحد أسلافها (ancestors) تحوي الثابت sym
أو str
المعطى.
أمثلة
مثال على استخدام التابع const_defined?
:
Float.const_defined?(:EPSILON) #=> true, found in Float itself
Float.const_defined?("String") #=> true, found in Object (ancestor)
BasicObject.const_defined?(:Hash) #=> false
انظر أيضا
- التابع
class_variables
: يعيد مصفوفة مكونة من أسماء متغيرات الصنف في الوحدة. - التابع
const_get
: يتحقق من وجود ثابت بالاسم المحدد في الوحدة.