我在工作中处理一个非常大的rails项目。有时我需要寻找类/常量定义。 Ruby中有一些内置的方法可以帮我吗?例如:
irb> SOME_CONSTANT.__file__
=> /some/path/to/a/file
答案 0 :(得分:1)
这不是您正在寻找的,但做方法对它们有.source_location方法。您可以使用它来查找实际实现类的位置。 (因为ruby允许你重新打开课程,这可能在多个地方)
例如,给定一个对象的实例, i :
i.methods.map do |method_name|
method_obj = i.method(method_name)
file, line = method_obj.source_location
file #map down to the file name
end.uniq
将为您提供实现 i 方法的所有文件的列表。
这适用于在ruby中至少实现1个方法的类。但它不适用于常数。
答案 1 :(得分:0)
在加载任何文件之前的最开始,插入一行,该行定义要检查的类/常量,而不是模块。例如,假设您的代码中有类或其他类型的常量A
,并且想知道它的定义位置。然后,在主文件的最开头,写
A = nil
然后,当程序运行时,只要它首次满足类/常量A
的定义,它就会显示类似
some_path_to_a_file:line_number in `some_method': A is not a class (TypeError)
或
some_path_to_a_file:line_number: warning: already initialized constant A
然后,some_path_to_a_file:line_number
将成为定义A
的位置。
答案 2 :(得分:0)
如果您使用的是Ruby 1.9.2,@ YenTheFirst的答案是正确的:在Method对象上调用#source_location
。
如果您使用的是Ruby 1.8.7,那么#source_location
就不存在了。你需要类似this implementation方法的东西。 (还有一两个浮动,但我找不到另一个真快的。)