Ruby (求助) 如何查阅 Ruby 源代码.

zw963 · 2012年04月14日 · 最后由 azhao 回复于 2012年07月01日 · 6259 次阅读

有关如何查阅 Ruby 源码, 到目前为止, 一直不得其法.

因为 Emacs 可以非常方便的根据光标位置的文本内容以及上下文, 自动打开所需的库. 觉得太方便了, 有关 Ruby, 我使用 etags 自己创建了正则表达式, 主要是跟踪合法的 def 定义, class 定义, module 定义, 并创建一个 TAGS, 到底我跟踪的对不对? 自己也不清楚,

我现在就是想知道, 使用别的编辑器或者集成 IDE 的朋友, 你们如何方便的查看 Ruby 自带的库源码呢? 有没有什么好的经验分享下.

晕哦, 问了这个问题之后, 貌似解决了.

匿名 #2 2012年04月14日

哈哈,我一般就 Vim + ctags,再弄个 NERD_tree 目录插件,OK

#2 楼 @ruchee

我刚刚发现, 铜鼓 etags 创建了 TAGS 之后, 通过 ido 可以直接在 require 'abc'之上打开 abc 对应的 Ruby 库文件了. 晕死, 之前咋就没发现呢. 只要在设法修改下代码, 应该也可以实现 require 'abc/def'之类的.

匿名 #4 2012年04月14日

#3 楼 @zw963 tags 文件的作用也就这两个嘛:代码补全 和 代码跳转

#4 楼 @ruchee

没听懂, 目前我发现的应用就是: 查找类,模块,方法定义, 还有就是方便在 require 那里,打开直接打开对应的库文件. (因为在 TAGS 中有完整的库文件路径), 不过你指的代码补全是什么意思?

匿名 #6 2012年04月14日

#5 楼 @zw963 Vim 内建支持 ctags 代码补全,比如 print 这个方法,我只需要输入前面几个字符,然后按快捷键就会根据设定的 tags 文件弹出补全菜单,选中想要的就自动插入到当前位置了

不过这功能太杂了,补全精度不高,我一般都是关了的。我现在只使用 snipMate 提供的 Tab 键补全,只要拥有自己熟悉的补全文件,写起代码来可真是健步如飞啊

#6 楼 @ruchee

嗯. 明白了.

的确啊. 我现在也是在一边用, 一边增加自己的 Ruby 词典, 将 Ruby 有关的一切单词都给它加进去.

匿名 #8 2012年04月14日

#7 楼 @zw963 恩,这就是个积累和熟悉的过程,想要加快编码速度就全靠它了

zhuxi,我总结的一个小经验:

补全文件的每个补全标签都要写上注释,而且每隔一段时间最好打开它看看、过过眼,这样就能总是很熟悉自己定义这些的东西,而且还有加深记忆语言本身语法的功能

拥有完备、熟悉的补全文件,IDE 当真就只是浮云了 :)

#8 楼 @ruchee

晕, 咱俩原来说的不是一个东西, 我说的补全是关键字补全, 就是输入一部分, 会自动提示剩余的部分, 如果你觉得是你想要的, 就按下 tab, 如果不是, 你可以继续输入, 缩小范围或者通过快键, 弹出 auto-complete 菜单选择所需的单词.

你说的补全, 我个人也不知道该咋称呼, 我反正就叫 snippet, 或者说代码扩展. 我同意你的建议, 我的 snippet 的名字往往会搞得很完整, 不用简写, 就是怕自己忘记是啥东西, 另外, 编写 snippet 的时候有 name 名称, 就是让你写注释的. 如果存在同一个 key 但是不同 name, 会弹出一个菜单供选择.

我还是太不了解 Vim 了. 我怀疑你是不是在同一个文件内的不同 section 内设定不同的补全. 无论怎么说, 补全的确牛啊. 而且肯定是自己写的补全最有感觉. 哈哈

#8 楼 @ruchee

感觉今天才真正的把 TAGS 用起来. 不错~

匿名 #11 2012年04月14日

#9 楼 @zw963 呵呵,我前面几个回复是切主题的,后面才偏的题

总的来说,ctags 提供的是关键字补全和函数调转,snipMate 提供的是自定义的缩略语补全

OK 了,我其实还是蛮佩服用 Emacs 的 :)

#11 楼 @ruchee

爽啊~ 这两天好像一下突然开始真正会用 TAGS 了 (我用的 etags,自己写的 regexp), 翻源码真是太方便了. etags 真 TMD 是个好玩意儿.

匿名 #13 2012年04月16日

#12 楼 @zw963 哈哈,能感觉到爽就是好事啊

@zw963 ruchee 用了 Rubymine 后我才知道啥叫高效且不折腾了。 看源码超级爽

PS:编码还喜欢 VIM,一个字:非常的快!XD

#14 楼 @camel

嗨~ 我这人其实要求不高, 虽然我知道 Rubymine 的代码映射或者或上下文智能提示应该很优秀, 不过使用 etags 我现在足够了. 目前可以方便的跟踪标准库中的所有方法定义, 类定义, 模块定义, 还有别名定义, 另外也可以方便的打开 require 'mathn'(只要光标在 mathn 上) 对应的库文件. 有这些就足够啦. 智能化肯定是没办法跟 Rubymine 比啦, 不过有时候都动动脑, 记一些东西也不是什么坏事儿. 太智能化的提示, 会让你产生严重的依赖性, 例如你输入某个对象, 再输入一个 dot, 就会弹出备选方法来. 类似这样的功能, 刚开始我还觉得挺有必要的. 不过越来越熟悉之后, 反而觉得有些多余了. 自己敲之也不错的, 而且通过词典也可以自动补全嘛, 只不过自己多敲几个字符, 给编辑器一点提示而已.

另外, 针对 TAGS, 而且如果我需要查看 Ruby 的 C 源码实现的话 (汗, C 早就忘光了), 我还可以把 Ruby C 源码中的方法以及函数和标准库的 Ruby 源码全部放到一个 TAGS 文件里面, 这个使用自定义的 TAGS 轻而易举, 这点如果 Rubymine 做死的话 (不支持 TAGS), 灵活度就差一些了.

#15 楼 @zw963 哈哈

不过有时候都动动脑, 记一些东西也不是什么坏事儿. 太智能化的提示, 会让你产生严重的依赖性

这段 +1,IDE 把人惯坏了。我也喜欢文本编辑器,这样可以强迫自己多记忆。

#15 楼 @zw963 用 pry 的的 show-method 就行了,c 源码也能看一些

$ pry -r ./config/environment
[1] pry(main)> show-method Array#each

From: array.c in Ruby Core (C Method):
Number of lines: 11
Owner: Array
Visibility: public

VALUE
rb_ary_each(VALUE ary)
{
    long i;

    RETURN_ENUMERATOR(ary, 0, 0);
    for (i=0; i<RARRAY_LEN(ary); i++) {
    rb_yield(RARRAY_PTR(ary)[i]);
    }
    return ary;
}


18 楼 已删除

我是下到本地,一个个 对照的看

ruby 的那些 c 源码,我偶尔看看,就直接看了...不专门看

需要 登录 后方可回复, 如果你还没有账号请 注册新账号