класс Thread::Backtrace::Location
Объектное представление кадра стека, инициализированное методом 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>'
Открытые методы экземпляров
static VALUE
location_absolute_path_m(VALUE self)
{
return location_absolute_path(location_ptr(self));
} Возвращает полный путь к файлу этого кадра.
То же самое, что и path, но включает абсолютный путь.
static VALUE
location_base_label_m(VALUE self)
{
return location_base_label(location_ptr(self));
} Возвращает базовый ярлык этого кадра.
Обычно совпадает с label без декораций.
static VALUE
location_inspect_m(VALUE self)
{
return rb_str_inspect(location_to_str(location_ptr(self)));
} Возвращает то же самое, что и вызов inspect над строковым представлением to_str
static VALUE
location_label_m(VALUE self)
{
return location_label(location_ptr(self));
} Возвращает ярлык этого кадра.
Обычно содержит имена методов, классов, модулей и т. д. с декорациями.
Рассмотрим следующий пример:
def foo
puts caller_locations(0).first.label
1.times do
puts caller_locations(0).first.label
1.times do
puts caller_locations(0).first.label
end
end
end
Результат вызова foo таков:
label: foo label: block in foo label: block (2 levels) in foo
static VALUE
location_lineno_m(VALUE self)
{
return INT2FIX(location_lineno(location_ptr(self)));
} Возвращает номер строки этого кадра.
Например, используя caller_locations.rb из Thread::Backtrace::Location
loc = c(0..1).first loc.lineno #=> 2
static VALUE
location_path_m(VALUE self)
{
return location_path(location_ptr(self));
} Возвращает имя файла этого кадра.
Например, используя caller_locations.rb из Thread::Backtrace::Location
loc = c(0..1).first loc.path #=> caller_locations.rb
static VALUE
location_to_str_m(VALUE self)
{
return location_to_str(location_ptr(self));
} Возвращает строку в стиле Kernel#caller, представляющую этот кадр.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.