الصنف Location في روبي

من موسوعة حسوب

تمثّل كائنات الصنف Location إطارات المكدس (stack frames)، وتُنشأ بواسطة التابع Kernel.caller_locations.

إليك مثلًا الشيفرة التالية:

# caller_locations.rb
def a(skip)
  caller_locations(skip)
end
def b(skip)
  a(skip)
end
def c(skip)
  b(skip)
end
c(0..2).map do |call|
  puts call.to_s
end

تشغيل الأمر ruby caller_locations.rb سوف ينتج:

caller_locations.rb:2:in `a'
caller_locations.rb:5:in `b'
caller_locations.rb:8:in `c'‎

إليك مثالًا آخر بنتيجة مختلفة بعض الشيء:

# foo.rb
class Foo
  attr_accessor :locations
  def initialize(skip)
    @locations = caller_locations(skip)
  end
end
Foo.new(0..2).locations.map do |call|
  puts call.to_s
end

الآن، إن قمت بتنفيذ ruby foo.rb، فيجب أن ترى المخرجات التالية:

init.rb:4:in `initialize'
init.rb:8:in `new'
init.rb:8:in `<main>'‎

توابع النسخة العامة

absolute_path

يُعيد مسار الملف الكامل للإطار.

base_label

يعيد التسمية الأساسية (base label) لهذا الإطار.

inspect

يُعيد نفس نتيجة استدعاء inspect مع السلسلة النصية التي يعيدها التابع to_str.

label

يعيد تسمية هذا الإطار.

lineno

يعيد رقم سطر هذا الإطار.

path

يُعيد اسم ملف هذا الإطار.

to_s

يُعيد سلسلة نصية تمثل هذا الإطار على نمط التابع Kernel.caller.

مصادر