繁体   English   中英

浏览Ruby源代码

[英]Navigating Ruby source code

我的主要目标是能够完全理解我正在使用的库/宝石。 我尝试在Github上从头到尾阅读源代码,但这真的很难。

我认为一个更有趣,更温和的垫脚只是在我使用它时阅读每个库/ gem方法的源代码。

例如,我想知道Ruby on Rails中的redirect_to方法是如何工作的:

  1. 如何查找redirect_to方法的源代码?
    • 我知道在pry中我可以做类似show-method method东西,但是如何在Rails框架中为方法执行此操作?
  2. 您对如何更好地了解宝石及其API有什么建议吗? 只是阅读源代码似乎很难,特别是对于框架。

谢谢!

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位置

https://github.com/rails/rails/blob/52ce6ece8c8f74064bb64e0a0b1ddd83092718e1/actionpack/lib/action_controller/metal/redirecting.rb

如果您可以将代码放入控制器中,这通常会提供更多信息:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM