التابع TracePoint.defined_class‎ في روبي

من موسوعة حسوب
مراجعة 05:42، 8 ديسمبر 2018 بواسطة جميل-بيلوني (نقاش | مساهمات) (مراجعة وتدقيق.)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

يُعيد التابع defined_class صنف أو وحدة التابع المُستدعى.

class C; def foo; end; end
trace = TracePoint.new(:call) do |tp|
  p tp.defined_class #=> C
end.enable do
  C.new.foo
end

إذا تم تعريف التابع بواسطة وحدة، فستعاد تلك الوحدة.

module M; def foo; end; end
class C; include M; end;
trace = TracePoint.new(:call) do |tp|
  p tp.defined_class #=> M
end.enable do
  C.new.foo
end

ملحوظة: يُعيد التابع defined_class صنفًا مفردًا (singleton class).

وسيط الكتلة السادس في التابع Kernel.set_trace_func يُمرَّر الصنف الأصليً (original class) للكائن عبر الصنف المفرد. هذا أحد الفوارق بين Kernel.set_trace_func و TracePoint.

البنية العامة

defined_class()

القيمة المعادة

يعاد صنف أو وحدة التابع المُستدعى.

أمثلة

مثال على استخدام التابع defined_class‎:

class C; def self.foo; end; end
trace = TracePoint.new(:call) do |tp|
  p tp.defined_class #=> #<Class:C>
end.enable do
  C.foo
end

انظر أيضًا

  • التابع callee_id: يُعيد اسم الاستدعاء الخاص بالتابع الذي يتم استدعاؤه.

مصادر