Ruby 4.0 リファレンスマニュアル

singleton method Thread.each_caller_location

each_caller_location(start = 1, length = nil) {|location| ... } -> nilRuby 3.2 から[permalink][rdoc][edit]
each_caller_location(range) {|location| ... } -> nil

現在の実行スタックの各フレームを、Thread::Backtrace::Location オブジェクトとしてブロックに渡します。

Kernel?.caller_locations と似ていますが、配列を作らずにブロックへ順に渡すため、目的のフレームが見つかった時点で処理を打ち切るような用途で無駄な生成を避けられます。引数の意味は Kernel?.caller_locations と同じで、ブロックに渡すフレームの範囲を指定できます。引数を渡せるのは Ruby 3.4 以降です。

[PARAM] start:
開始フレームの位置を数値で指定します。
[PARAM] length:
ブロックに渡すフレームの個数を指定します。
[PARAM] range:
ブロックに渡したいフレームの範囲を示す Range オブジェクトを指定します。

nil を返します。

def foo
  Thread.each_caller_location do |location|
    p location.class # => Thread::Backtrace::Location
    break
  end
end

foo

[SEE_ALSO] Kernel?.caller_locations