اذهب إلى المحتوى

السؤال

نشر

في الكثير من الأحيان عندما أقرأ شيفرات برمجية مكتوبة بلغة روبي أجد رموز غريبة مثل :: كما في المثال التالي:

module Artifice
  NET_HTTP = ::Net::HTTP
  # ...
end

فماذا يعني هذا الرمز؟

Recommended Posts

  • 0
نشر

يرمز هذا الرمز في لغة روبي بالنطاق العام بدلا من المحلي، أي سيُمكنّك هذا الرمز من الوصول إلى دوال وأصناف ووحدات داخل وحدات أخرى.
في حالة وجود تابع أو وحدة تبحث عنها داخل وحدات أخرى فيجب عليك إذا استدعائها بكتابة أسماء هذه الوحدات ومن ثم افصل بينها باستخدام هذا الرمز ليصبح كمسار لهذا التابع/الوحدة.
لتفهم هذا الرمز بشكل أفضل انظر إلى المثال التالي والذي يشرح الوحدات الداخلية والعامة:

module A
  def self.method; "Outer"; end
end
module B
  module A
    def self.method; "Inner"; end
  end
  A.method   # => "Inner"
  ::A.method # => "Outer"
end


  • 0
نشر

:: يُسمى عامل تحليل النطاق. مهمته هي تحديد النطاق الذي يمكن العثور على الوحدة فيه. علي سبيل المثال:

module Music
  module Record
    # لفرقة البيتلز Abbey Road مثلاً نسخة من
  end

  module EightTrack
    # مثل أغنية سوف أنجو للمغنية غلوريا جاينور
  end
end
module Record
  # لإضافة عنصر إلى قاعدة البيانات
end

للوصول إلى Record من خارج Music، يمكنك استخدام Music :: Record.
للإشارة إلى Record من Music :: EightTrack، يمكنك ببساطة استخدام Record لأنه تم تعريفه في نفس النطاق (نطاق Music ).

ومع ذلك، للوصول إلى وحدة Record المسؤولة عن التفاعل مع قاعدة البيانات الخاصة بك من Music :: EightTrack، لا يمكنك فقط استخدام Record لأن روبي يعتقد أنك تريد Music :: Record. وهنا يأتي الوقت الذي ستستخدم فيه عامل تحليل النطاق كبادئة prefix، مع تحديد النطاق الرئيسي Record::

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...