由于 ruby 和 rails 的动态性,给编码带来很多乐趣,但是同样导致了阅读代码的痛苦。
比如说在 views 里面有一个方法 xxx_helper。 这个方法的定义可能:
defind_method
...对于第一种情况下,我们一般全局搜索一下就可以。 但是对于第二第三种,要怎么去找呢?(除了凭借丰富的经验,)
@help5305fff 可悲的是我们常常喜欢工具 A 的 A 功能,也喜欢工具 B 的 B 功能,然后就没有最了,只有同时用多个,或者找个高可定制的工具。again, VIM..
@heliang7 6.9 就够了,配合 git 下的命令行,netbeans 就纯编码,外加菜鸟用来调试。 RubyMine 从 netbeans 里抄了很多了
对于静态生成的方法,指那些不是运行期动态生成的方法, 我使用 CTags 定位 Vim 和 SublimeText2 都可以使用 CTags
我自己写了一个脚本,来生成 CTags,如下
tags-project ()
{
DIR_1=~/Documents/project/;
DIR_2=~/.rvm/gems/ruby-1.9.3-p0@project/gems;
DIR_3=~/.rvm/gems/ruby-1.9.3-p0@project/bundler/gems;
DIR_4=~/.rvm/rubies/ruby-1.9.3-p0;
cd ~/Documents/project/;
ctags -R $DIR_1 $DIR_2 $DIR_3 $DIR_4 2> /tmp/log;
rm .tags;
ln -s tags .tags;
ls --color=auto -lF tags -h
}
至于动态产生的方法,就很折磨人, 使用 binding.pry 然后使用 show-method, 只能定位到相关的创建代码, 无法直观的看到函数源码, 只能凭感觉,猜测函数代码的内容。 这点,绝对是 Ruby 的硬伤!
不过,我曾经研究过,如何查看动态生成的函数的源码的问题, 我当时发现了一个 gem 叫做 ParseTree 但是 ParseTree,不支持 ruby 1.9 后来,我就没再研究, 有关内容,可以看看这帖子 《关于查看 Rails 动态生成的函数源码的问题》 http://ruby-china.org/topics/1441
@fsword 感觉你就属于,抵制日货那类人~好歹是做产品的,从产品自身去看问题吧。。。。好的产品,能提升自己就足够啦。自身强了,你再去打倒 oracle 呗。
比喻不当,莫怪
#26 楼 @zlx_star 不是,举个简单的例子,我想知道 User.first 这个方法在哪里定义的:
script/rails runner "require 'tracer';Tracer.on{User.first}" > log/tracer.log
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/querying.rb:5:ActiveRecord::Querying:-: delegate :find, :first, :first!, :last, :last!, :all, :exists?, :any?, :many?, :to => :scoped
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/scoping/named.rb:30:ActiveRecord::Scoping::Named::ClassMethods:>: def scoped(options = nil)
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/scoping/named.rb:31:ActiveRecord::Scoping::Named::ClassMethods:-: if options
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/scoping/named.rb:34:ActiveRecord::Scoping::Named::ClassMethods:-: if current_scope
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/scoping.rb:125:ActiveRecord::Scoping::ClassMethods:>: def current_scope #:nodoc:
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/scoping.rb:126:ActiveRecord::Scoping::ClassMethods:-: Thread.current["#{self}_current_scope"]
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/scoping.rb:127:ActiveRecord::Scoping::ClassMethods:<: end
后面还有很多。。。
总结一下自己准备使用的方法:
#24 楼 @help5305fff 你过度联想了,我的意思很简单,做产品不能有投机心态,因为需要坚持和积累,作为用户,我认为 oracle 回过头做 NB 上的 ruby 插件不靠谱