instance method Module#const_source_location

const_source_location(name, inherited = true) -> [String, Integer][permalink][rdoc][edit]

name で指定した定数の定義を含むソースコードのファイル名と行番号を配列で返します。

[PARAM] name:
Symbol,String で定数の名前を指定します。
[PARAM] inherited:
true を指定するとスーパークラスや include したモジュールで定義された定数が対象にはなります。false を指定した場合 対象にはなりません。
[RETURN]
ソースコードのファイル名と行番号を配列で返します。指定した定数が見つからない場合は nil を返します。定数は見つかったがソースファイルが見つからなかった場合は空の配列を返します。


# test.rb:
class A         # line 1
  C1 = 1
  C2 = 2
end

module M        # line 6
  C3 = 3
end

class B < A     # line 10
  include M
  C4 = 4
end

class A # 継続して A を定義する
  C2 = 8 # 定数を再定義する
end

p B.const_source_location('C4')           # => ["test.rb", 12]
p B.const_source_location('C3')           # => ["test.rb", 7]
p B.const_source_location('C1')           # => ["test.rb", 2]

p B.const_source_location('C3', false)    # => nil  -- include したモジュールは検索しない

p A.const_source_location('C2')           # => ["test.rb", 16] -- 最後に定義された位置を返す

p Object.const_source_location('B')       # => ["test.rb", 10] -- Object はトップレベルの定数を検索する
p Object.const_source_location('A')       # => ["test.rb", 1] -- クラスが再定義された場合は最初の定義位置を返す

p B.const_source_location('A')            # => ["test.rb", 1]  -- Object を継承している為
p M.const_source_location('A')            # => ["test.rb", 1]  -- Object は継承していないが追加で modules をチェックする

p Object.const_source_location('A::C1')   # => ["test.rb", 2]  -- ネストの指定もサポートしている
p Object.const_source_location('String')  # => []  -- 定数は C のコードで定義されている