صفحة الصنف BasicObject
في روبي
الصنف BasicObject
هو الصنف الأب لجميع الأصناف في روبي، وهو صنف فارغ.
يمكن استخدام الصنف BasicObject
لإنشاء هرميات كائنية (object hierarchies) مستقلة عن الهرمية الكائنية للغة روبي، أو لإنشاء مغلفات الكائنات (proxy objects) مثل الصنف Delegator
، أو حيث يجب تجنب إفساد مجال الأسماء (namespace pollution) من قبل توابع وأصناف روبي.
لتجنب إفساد الصنف BasicObject
للمستخدمين الآخرين، يجب إنشاء صنف فرعي من الصنف BasicObject
تحت اسم مناسب بدلاً من تعديل BasicObject
مباشرةً:
class MyObjectSystem < BasicObject end
class MyObjectSystem < BasicObject
end
لا يتضمَّن الصنف BasicObject
الوحدة Kernel
(التي تضم توابعًا مثل puts
)، كما أنَّ الصنف BasicObject
موجود خارج مجال الأسماء الخاص بالمكتبة القياسية (standard library)، لذا لن يُعثَر على الأصناف الشائعة دون استخدام مسار الصنف بأكمله.
يمكن استخدام عدة استراتيجيات لجعل أجزاء من المكتبة القياسية متاحةً في الأصناف المتفرِّعة من الصنف BasicObject
. يستطيع صنف فرعي أن يُضمِّن الصنف Kernel
لأجل الحصول توابع مثل puts
و exit
وغيرهما. يمكن إنشاء وتضمين وحدة (module) مُخصصة مشابهة للوحدة Kernel
، أو يمكن استخدام التفويض (delegation) عبر method_missing
:
class MyObjectSystem < BasicObject
DELEGATE = [:puts, :p]
def method_missing(name, *args, &block)
super unless DELEGATE.include? name
::Kernel.send(name, *args, &block)
end
def respond_to_missing?(name, include_private = false)
DELEGATE.include?(name) or super
end
end
يمكن للأصناف الفرعية للصنف BasicObject
الوصول إلى أصناف ووحدات من المكتبة القياسية للغة روبي وذلك عبر الإشارة إلى الثابت المطلوب من الجذر مباشرةً، مثل ::File
أو ::Enumerator
.
يمكن استخدام const_missing
لتفويض (delegate) البحث عن الثوابت إلى الكائن Object
مثل method_missing
تمامًا:
class MyObjectSystem < BasicObject
def self.const_missing(name)
::Object.const_get(name)
end
end