الفرق بين المراجعتين ل"Ruby/BasicObject"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>BasicObject</code> في روبي
 
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>BasicObject</code> في روبي
  }}</noinclude>\n[[تصنيف: Ruby]]\n[[تصنيف: Ruby Method]]\n[[تصنيف: Ruby ARGF]]
+
  }}</noinclude>[[تصنيف: Ruby]]
 +
[[تصنيف: Ruby Method]]
 +
[[تصنيف: Ruby ARGF]]
 
الصنف <code>BasicObject</code>هو الصنف الأب لجميع الأصناف في روبي، وهو صنف فارغ.
 
الصنف <code>BasicObject</code>هو الصنف الأب لجميع الأصناف في روبي، وهو صنف فارغ.
  
يمكن استخدام  الصنف <code>BasicObject</code> لإنشاء هرميات كائنية (object hierarchies) مستقلة عن الهرمية الكائنية للغة روبي، أو لإنشاء مغلفات الكائنات (proxy objects) مثل الصنف Delegator، أو حيث يجب تجنب إفساد مجال الأسماء (namespace pollution) من قبل توابع وأصناف روبي.
+
يمكن استخدام  الصنف <code>BasicObject</code> لإنشاء هرميات كائنية (object hierarchies) مستقلة عن الهرمية الكائنية للغة روبي، أو لإنشاء مغلفات الكائنات (proxy objects) مثل الصنف <code>Delegator</code>، أو حيث يجب تجنب إفساد مجال الأسماء (namespace pollution) من قبل توابع وأصناف روبي.
 +
 
 +
لتجنب إفساد الصنف <code>BasicObject</code> للمستخدمين الآخرين، يجب إنشاء صنف فرعي من الصنف <code>BasicObject</code> تحت اسم مناسب بدلاً من تعديل <code>BasicObject</code> مباشرةً:
  
لتجنب إفساد الصنف BasicObject للمستخدمين الآخرين، يجب إنشاء صنف فرعي من الصنف <code>BasicObject</code> تحت اسم مناسب بدلاً من تعديل <code>BasicObject</code> مباشرةً:
 
 
class MyObjectSystem < BasicObject
 
class MyObjectSystem < BasicObject
 
end
 
end
لا يتضمَّن الصنف BasicObject الوحدة Kernel (التي تضم توابعًا مثل puts)، كما أنَّ الصنف <code>BasicObject</code> موجود خارج مجال الأسماء الخاص بالمكتبة القياسية (standard library)، لذا لن يُعثَر على الأصناف الشائعة دون استخدام مسار الصنف بأكمله.
+
<syntaxhighlight lang="ruby">
يمكن استخدام عدة استراتيجيات لجعل أجزاء من المكتبة القياسية متاحةً في الأصناف المتفرِّعة من الصنف <code>BasicObject</code>. يستطيع صنف فرعي أن يُضمِّن الصنف Kernel لأجل الحصول توابع مثل puts و exit وغيرهما. يمكن إنشاء وتضمين وحدة (module) مُخصصة مشابهة للوحدة Kernel، أو يمكن استخدام التفويض (delegation) عبر method_missing:
+
class MyObjectSystem < BasicObject
 +
end
 +
</syntaxhighlight>لا يتضمَّن الصنف <code>BasicObject</code> الوحدة <code>Kernel</code> (التي تضم توابعًا مثل <code>puts</code>)، كما أنَّ الصنف <code>BasicObject</code> موجود خارج مجال الأسماء الخاص بالمكتبة القياسية (standard library)، لذا لن يُعثَر على الأصناف الشائعة دون استخدام مسار الصنف بأكمله.
 +
 
 +
يمكن استخدام عدة استراتيجيات لجعل أجزاء من المكتبة القياسية متاحةً في الأصناف المتفرِّعة من الصنف <code>BasicObject</code>. يستطيع صنف فرعي أن يُضمِّن الصنف <code>Kernel</code> لأجل الحصول توابع مثل <code>puts</code> و <code>exit</code> وغيرهما. يمكن إنشاء وتضمين وحدة (module) مُخصصة مشابهة للوحدة <code>Kernel</code>، أو يمكن استخدام التفويض (delegation) عبر <code>method_missing</code>:<syntaxhighlight lang="ruby">
 
class MyObjectSystem < BasicObject
 
class MyObjectSystem < BasicObject
 
   DELEGATE = [:puts, :p]
 
   DELEGATE = [:puts, :p]
سطر 22: سطر 29:
 
   end
 
   end
 
end
 
end
يمكن للأصناف الفرعية للصنف <code>BasicObject</code> الوصول إلى أصناف ووحدات من المكتبة القياسية للغة روبي وذلك عبر الإشارة إلى الثابت المطلوب من الجذر مباشرةً، مثل ‎::File أو ‎::Enumerator.
+
</syntaxhighlight>يمكن للأصناف الفرعية للصنف <code>BasicObject</code> الوصول إلى أصناف ووحدات من المكتبة القياسية للغة روبي وذلك عبر الإشارة إلى الثابت المطلوب من الجذر مباشرةً، مثل <code>‎::File</code> أو ‎<code>::Enumerator</code>.
يمكن استخدام const_missing لتفويض (delegate) البحث عن الثوابت إلى الكائن Object مثل method_missing تمامًا:
+
يمكن استخدام <code>const_missing</code> لتفويض (delegate) البحث عن الثوابت إلى الكائن <code>Object</code> مثل <code>method_missing</code> تمامًا:<syntaxhighlight lang="ruby">
 
class MyObjectSystem < BasicObject
 
class MyObjectSystem < BasicObject
 
   def self.const_missing(name)
 
   def self.const_missing(name)
سطر 29: سطر 36:
 
   end
 
   end
 
end
 
end
مصادر
+
</syntaxhighlight>
صفحة الصنف BasicObject في توثيق روبي الرسمي.
+
 
 +
== مصادر ==
 +
* [http://ruby-doc.org/core-2.5.1/BasicObject.html صغحة الصنف BasicObject في توثيق روبي الرسمي.]

مراجعة 18:58، 11 سبتمبر 2018

الصنف 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

مصادر