要約
Ruby のフレームを表すクラスです。
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
例1の実行結果:
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
例2の実行結果:
init.rb:4:in `initialize' init.rb:8:in `new' init.rb:8:in `<main>'
参考
- Ruby VM アドベントカレンダー #4 vm_backtrace.c: https://www.atdot.net/~ko1/diary/201212.html#d4
目次
- インスタンスメソッド
インスタンスメソッド
absolute_path -> String
[permalink][rdoc][edit]-
self が表すフレームの絶対パスを返します。
# 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.absolute_path end # => /path/to/foo.rb # /path/to/foo.rb # /path/to/foo.rb
[SEE_ALSO] Thread::Backtrace::Location#path
base_label -> String
[permalink][rdoc][edit]-
self が表すフレームの基本ラベルを返します。通常、 Thread::Backtrace::Location#label から修飾を取り除いたもので構成されます。
# 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.base_label end # => initialize # new # <main>
[SEE_ALSO] Thread::Backtrace::Location#label
inspect -> String
[permalink][rdoc][edit]-
Thread::Backtrace::Location#to_s の結果を人間が読みやすいような文字列に変換したオブジェクトを返します。
# 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.inspect end # => "path/to/foo.rb:5:in `initialize'" # "path/to/foo.rb:9:in `new'" # "path/to/foo.rb:9:in `<main>'"
label -> String
[permalink][rdoc][edit]-
self が表すフレームのラベルを返します。通常、メソッド名、クラス名、モジュール名などで構成されます。
例: Thread::Backtrace::Location の例1を用いた例
loc = c(0..1).first loc.label # => "a"
[SEE_ALSO] Thread::Backtrace::Location#base_label
lineno -> Integer
[permalink][rdoc][edit]-
self が表すフレームの行番号を返します。
例: Thread::Backtrace::Location の例1を用いた例
loc = c(0..1).first loc.lineno # => 2
path -> String
[permalink][rdoc][edit]-
self が表すフレームのファイル名を返します。
例: Thread::Backtrace::Location の例1を用いた例
loc = c(0..1).first loc.path # => "caller_locations.rb"
[SEE_ALSO] Thread::Backtrace::Location#absolute_path
to_s -> String
[permalink][rdoc][edit]-
self が表すフレームを Kernel.#caller と同じ表現にした文字列を返します。
# 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 # => path/to/foo.rb:5:in `initialize' # path/to/foo.rb:9:in `new' # path/to/foo.rb:9:in `<main>'