類別 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>'
公開實例方法
absolute_path() 按一下以切換來源
傳回此框架的完整檔案路徑。
與 path
相同,但即使框架在主程式中,也會傳回絕對路徑。
static VALUE location_absolute_path_m(VALUE self) { return location_realpath(location_ptr(self)); }
base_label() 按一下以切換來源
傳回此框架的基本標籤。
通常與 label
相同,沒有裝飾。
static VALUE location_base_label_m(VALUE self) { return location_base_label(location_ptr(self)); }
inspect() 按一下以切換來源
傳回與對 to_str 的字串表示法呼叫 inspect
相同的結果
static VALUE location_inspect_m(VALUE self) { return rb_str_inspect(location_to_str(location_ptr(self))); }
label() 按一下以切換來源
傳回此框架的標籤。
通常包含方法、類別、模組等名稱,並加上裝飾。
考慮以下範例
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_label_m(VALUE self) { return location_label(location_ptr(self)); }
lineno() 按一下以切換來源
傳回此框架的行號。
例如,使用 Thread::Backtrace::Location
中的 caller_locations.rb
loc = c(0..1).first loc.lineno #=> 2
static VALUE location_lineno_m(VALUE self) { return INT2FIX(location_lineno(location_ptr(self))); }
path() 按一下以切換來源
傳回此框架的檔案名稱。這通常會是絕對路徑,除非框架在主程式中,這種情況下,它會是命令列中傳遞的程式碼位置。
例如,使用 Thread::Backtrace::Location
中的 caller_locations.rb
loc = c(0..1).first loc.path #=> caller_locations.rb
static VALUE location_path_m(VALUE self) { const rb_iseq_t *iseq = location_iseq(location_ptr(self)); return iseq ? rb_iseq_path(iseq) : Qnil; }
to_s() 按一下以切換來源
傳回表示此框架的 Kernel#caller
樣式字串。
static VALUE location_to_str_m(VALUE self) { return location_to_str(location_ptr(self)); }