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

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

有关如何查阅 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 源码,我偶尔看看,就直接看了...不专门看

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