[英]Navigating Ruby source code
我的主要目标是能够完全理解我正在使用的库/宝石。 我尝试在Github上从头到尾阅读源代码,但这真的很难。
我认为一个更有趣,更温和的垫脚只是在我使用它时阅读每个库/ gem方法的源代码。
例如,我想知道Ruby on Rails中的redirect_to
方法是如何工作的:
redirect_to
方法的源代码?
show-method method
东西,但是如何在Rails框架中为方法执行此操作? 谢谢!
RubyMine IDE满足了我的需求。 它具有这些功能,大大降低了阅读宝石源的障碍:
Gems是项目树的一部分(在External Libraries伪目录中),因此您可以像编写自己的代码一样导航甚至编辑它们。
单个键命令(Mac上的命令-B)从标识符(模块/类名,方法名等)导航到其声明,或者如果有多个声明则显示可供选择的列表。 它适用于您的代码和gem代码。
另一个命令(Mac上的option-command-O)允许您输入标识符名称以导航到上面。 如果在您的代码中找不到您输入的内容,它会自动包含库代码; 如果在您的代码中找到了您输入的内容,您可以再次点击密钥以包含gem代码。
调试器不断显示您正在执行的代码。 您可以设置断点而无需编辑所需的代码。 您可以检查实际执行的堆栈框架上方的任何堆栈框架。 所有这些功能同样适用于您的代码和gem代码。
通常,RubyMine具有gem代码和项目代码的所有功能。
关于理解除了阅读源代码之外的宝石的方法:大多数宝石都记录在他们的自述文件中(我总是在Github上阅读)以及宝石根目录或doc目录中的其他文档文件。 一些宝石(包括Rails宝石)具有值得阅读的rdoc。 但是,由于从使用gem到代码导航非常方便,我通常首先尝试,然后在读取实际代码之前读取代码中的rdoc(如果有的话)。 RubyMine还可以显示rdoc作为使用它的标识符(Mac上的F1),但我总是发现直接使用代码更容易。
尝试学习如何使用gem时,我的第一种方法是编写测试。
Robert C. Martin写道:
学习第三方代码很难。 集成第三方代码也很难。 同时做两件事是双倍的困难。 如果我们采取不同的方法怎么办? 我们可以编写一些测试来探索我们对第三方代码的理解,而不是在我们的生产代码中试验和尝试新的东西。 Jim Newkirk将此类测试称为学习测试。
在学习测试中,我们称之为第三方API,因为我们希望在我们的应用程序中使用它。 我们基本上做了一些控制实验,检查我们对该API的理解。 测试侧重于我们想要的API。
当你真正关心内部工作原理时,阅读源代码。
希望这可以帮助!
至于在ActionController :: Redirecting中定义redirect_to
位置
如果您可以将代码放入控制器中,这通常会提供更多信息:
raise method(:redirect_to).source_location.inspect
这将精确显示方法的定义位置。
在使用像这样的大型代码库时,我通常非常依赖git
:
git grep 'def redirect_to'
如果没有任何结果:
git grep 'redirect_to'
您可能需要更仔细地过滤,但实际上通过视觉突出显示。
关于Ruby代码的好处是它通常具有很强的可读性,通过它进行搜索通常比其他语言更令人愉快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.