在 Ruby 中有效地浏览源代码
Navigating through source code efficiently in Ruby
我试图找到调用 Item.where(dst: "video")
时调用的方法(项目是 Mongoid 模型)。在源代码中查找,我看到 criteria.rb 是要去的地方。但是,def where
会调用 super。然后Origin::Selectable
(包含在Origin::Queryable
里面)定义它:
def where(criterion = nil)
criterion.is_a?(String) ? js_query(criterion) : expr_query(criterion)
end
现在,我必须看看 js_query
和 expr_query
在哪里,看看它们做什么等等。
浏览所有这些源代码和模块、找到所有方法然后试图弄清楚它是如何工作的变得很困难。
是否有更好的方法来执行此过程以了解其工作原理?
如果你知道接收者的class(比如A
)和方法名(比如foo
),那么你可以这样做:
A.instance_method(:foo).source_location
在大多数情况下,这将给出文件名和行号。如果它 returns nil
,那么它很可能是一个 C 定义的方法,它不依赖于其他 Ruby 方法。
另一种方法是使用 pry
gem 或 method_source
gem.
您可能需要改进您的编辑器体验。共有三种非凡的能力(除了 Eclipse/Aptana, NetBeans 等许多其他能力):
- RubyMine — 不是免费的,但可能是最好的;
- Atom Editor with RSense plugin — free (plugins are also available for SublimeText and TextMate2;
- vim/emacs 与
[c|e]tags
.
根据您的选择,您可以使用 Ctrl+Click 或您喜欢的键盘快捷键快速浏览代码.
这里这个问题也被问了很多次:https://whosebug.com/search?q=best+ruby+editor
希望对您有所帮助。
我试图找到调用 Item.where(dst: "video")
时调用的方法(项目是 Mongoid 模型)。在源代码中查找,我看到 criteria.rb 是要去的地方。但是,def where
会调用 super。然后Origin::Selectable
(包含在Origin::Queryable
里面)定义它:
def where(criterion = nil)
criterion.is_a?(String) ? js_query(criterion) : expr_query(criterion)
end
现在,我必须看看 js_query
和 expr_query
在哪里,看看它们做什么等等。
浏览所有这些源代码和模块、找到所有方法然后试图弄清楚它是如何工作的变得很困难。
是否有更好的方法来执行此过程以了解其工作原理?
如果你知道接收者的class(比如A
)和方法名(比如foo
),那么你可以这样做:
A.instance_method(:foo).source_location
在大多数情况下,这将给出文件名和行号。如果它 returns nil
,那么它很可能是一个 C 定义的方法,它不依赖于其他 Ruby 方法。
另一种方法是使用 pry
gem 或 method_source
gem.
您可能需要改进您的编辑器体验。共有三种非凡的能力(除了 Eclipse/Aptana, NetBeans 等许多其他能力):
- RubyMine — 不是免费的,但可能是最好的;
- Atom Editor with RSense plugin — free (plugins are also available for SublimeText and TextMate2;
- vim/emacs 与
[c|e]tags
.
根据您的选择,您可以使用 Ctrl+Click 或您喜欢的键盘快捷键快速浏览代码.
这里这个问题也被问了很多次:https://whosebug.com/search?q=best+ruby+editor
希望对您有所帮助。