• 0

كيف أحصل على اسم التابع الذي قام باستدعاء تابع آخر في روبي؟

هل هنالك طريقة في الروبي أستطيع به الحصول على اسم التابع الذي قام باستدعاء تابع آخر؟ مثال:

class Test
  def self.foo
    Fooz.bar
  end
end

class Fooz
  def self.bar
    # سوف أحصل على Test.foo أو foo
  end
end

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

هنالك عدة طرق للحصول على اسم التابع الذي قام باستدعاء تابع آخر من داخله، فمثلا يُمكننا استعمال caller كما في المثال التالي:

puts caller[0]

ولتحسين الناتج يمكنك استخدام هذا السطر لحذف ما هو ليس ضروري في الناتج وإظهار اسم التابع التي قام بالاستدعاء فقط:

puts caller[0][/`.*'/][1..-2]

وإذا كنت تستخدم الإصدار الثاني من الروبي، فيمكنك في هذه الحالة اختصار السطر السابق كما يلي:

caller_locations(1,1)[0].label

هذه الطريقة أسرع بكثير من الطريقة السابقة.
أو يمكنك استخدام ما يلي أيضا للحصول على اسم التابع:

caller[0][/`([^']*)'/, 1]

المصدر

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن