Ruby/BasicObject

من موسوعة حسوب
< Ruby
مراجعة 18:51، 11 سبتمبر 2018 بواسطة محمد-بغات (نقاش | مساهمات) (أنشأ الصفحة ب'صفحة الصنف <code>BasicObject</code> في روبي الصنف <code>BasicObject</code>هو الصنف الأب لجميع الأصناف في روبي، وهو...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

صفحة الصنف BasicObject في روبي الصنف BasicObjectهو الصنف الأب لجميع الأصناف في روبي، وهو صنف فارغ. يمكن استخدام الصنف BasicObject لإنشاء هرميات كائنية (object hierarchies) مستقلة عن الهرمية الكائنية للغة روبي، أو لإنشاء مغلفات الكائنات (proxy objects) مثل الصنف Delegator، أو حيث يجب تجنب إفساد مجال الأسماء (namespace pollution) من قبل توابع وأصناف روبي. لتجنب إفساد الصنف BasicObject للمستخدمين الآخرين، يجب إنشاء صنف فرعي من الصنف BasicObject تحت اسم مناسب بدلاً من تعديل BasicObject مباشرةً: 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 مصادر صفحة الصنف BasicObject في توثيق روبي الرسمي.