source_range -> Ruby::SourceRangeRuby 4.1 から[permalink][rdoc][edit]-
selfが表すフレームに対応する Ruby の式の Ruby::SourceRange を返します。CRuby では、このメソッドは呼び出されるたびにソースファイルを再度読み込んでパースし直すことで範囲を求めます。読み込みで発生したファイルのエラー(存在しないファイルに対する
Errno::ENOENTなど)はそのまま発生します。RubyVM.keep_script_lines = trueを指定すると、ソースファイルをメモリ上に保持し、ファイルシステムからの再読み込みを避けられます。eval したコードのフレームでは、RubyVM.keep_script_lines = trueを指定していないと範囲を取得できません。- [EXCEPTION]
RuntimeError: - ソースが変更されているなど、範囲を求めるために必要な情報が得られない場合に発生します。
- [EXCEPTION]
ArgumentError: -
eval したコードのフレームで、
RubyVM.keep_script_lines = trueを指定していない場合に発生します。
loc = caller_locations(0, 1)[0] range = loc.source_range p range.path == loc.path # => true p range.start_line == loc.lineno # => true[SEE_ALSO] Thread::Backtrace::Location#syntax_tree, Proc#source_range
- [EXCEPTION]