Ruby实现命令行中查看函数源码的方法

首页 > 脚本专栏 > ruby专题 更新日期: 2016-03-30
这篇文章主要介绍了Ruby实现命令行中查看函数源码的方法,,需要的朋友可以参考下

如果要查看 ActiveRecord 的 update_attribute 函数的源代码,一个比较常见的方法是直接在 Rails 源码中搜索 def update_attribute。博客 The Pragmatic Studio 介绍了一个更方便的技巧,在 Ruby 命令行中就能启动编辑器直接访问。

通过 Object#method 方法可以获得 update_attribute 方法的对象,而 Method#source_location 则返回这个方法定义的文件和位置。有了这个信息后,就能启动编辑器查看源代码了:

代码如下:

> method = User.first.method(:update_attribute)
  User Load (0.5ms)  SELECT `users`.* FROM `users` LIMIT 1
=> #<Method: User(ActiveRecord::Persistence)#update_attribute>

> location = method.source_location
=> ["/Users/wyx/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.2.11/lib/active_record/persistence.rb",
 177]

> `subl #{location[0]}:#{location[1]}`
=> ""

把这段代码封装成函数,加到 .pryrc 或者 .irbrc 中:

代码如下:

def source_for(object, method)
  location = object.method(method).source_location
  `subl #{location[0]}:#{location[1]}` if location && location[0] != '(eval)'
  location
end

如果要查看 User 的实例方法 update_attribute,可以直接在 pry / irb 中调用

代码如下:

source_for(User.first, :update_attribute)

如果要使用其他编辑器,得把 subl #{location[0]}:#{location[1]} 换成这个编辑器对应的命令行:

代码如下:

# TextMate
mate #{location[0]} -l #{location[1]}

# MacVim
mvim #{location[0]} +#{location[1]}

# Emacs
emacs {location[0]} +#{location[1]}


> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!

相关文章
  • 实例讲解yii2.0在php命令行中运行的步骤
    实例讲解yii2.0在php命令行中运行的步骤
    Yii中的资源是和Web页面相关的文件,可为CSS文件,JavaScript文件,图片或视频等,资源放在Web可访问的目录下,直接被Web服务器调用.本文通过实例讲解yii2.0在php命令行中运行的步骤,对yii2.0 php相关知识感兴趣的朋友一起学习吧Yii中的资源是和Web页面相关的文件,可为CSS文件,JavaScript文件,图片或视频等,资源放 ...
  • CMD命令行下修改网络IP设置的方法
    CMD命令行下修改网络IP设置的方法,需要的朋友可以参考下.不累述,直接两个例子: 1.全自动修改网络地址: 代码如下: @echo off netsh interface ip set address name="本地连接" static 192.168.1.55 255.255.255.0 192.168.1.1 auto >n ...
  • J2SE基础之命令行中编写第一个HelloWorld
    J2SE基础之命令行中编写第一个HelloWorld
    "Hello World"程序指的是只在计算机屏幕上输出"Hello, World!"意为"世界,你好!"这行字符串的计算机程序.hello world作为所有编程语言的起始阶段,占据着无法改变的地位,所有的编程第一步就在于此了!经典之中的经典!hello world!大家真正在工作中开发 java ...
  • DOS命令行窗口mysql中文显示乱码问题解决方法
    DOS命令行窗口mysql中文显示乱码问题解决方法
    MySQL的默认编码是Latin1,不支持中文,如何修改MySQL的默认编码呢,下面为大家详细介绍下MySQL的默认编码是Latin1,不支持中文,如何修改MySQL的默认编码呢,下面以gbk为例来说明(这里只介绍Windows环境下) 1.中止MySQL服务(打开控制面板-->管理工具-->服务)找到MySQL,右键选择停止. 2.打开MySQ ...
  • 在Perl中使用Getopt::Long模块来接收用户命令行参数
    我们在linux常常用到一个程序需要加入参数,现在了解一下perl中的有关控制参数的函数.getopt.在linux有的参数有二种形式.一种是–help,另一种是-h.也就是-和–的分别.–表示完整参数.-表示简化参数我们在linux常常用到一个程序需要加入参数,现在了解一下 perl 中的有关控制参数的模块 Getopt::Long ,比直接使用 @ARG ...
猜你喜欢