如果我在其中键入'n'并返回,则Rails 3.2.7控制台退出。这不是IRB的特征; n在那里被视为未声明的变量。使用rails控制台(不出所料)谷歌搜索'n'没有任何结果。
有人可以解释为什么Rails会引入这个别名吗?
答案 0 :(得分:1)
使用rails 3.1.3不会发生这种情况。这是一个新的错误还是在你的rails初始化器中加载的东西正在这样做?
答案 1 :(得分:0)
该方法由debugger
gem添加到主对象中。正如@weexpectedTHIS指出的那样,这不会发生在一个vanilla Rails应用程序中。取消注释gem 'debugger'
和bundle install
,n
即可退出。
只是为了好玩,我想我会投入一些侦探工作。 irb中可调用的方法似乎是main
对象上的方法。您似乎不能通过名称引用main:
1.9.3p194 :013 > main
NameError: undefined local variable or method `main' for main:Object
但你仍然可以得到主要对象:
1.9.3p194 :014 > self
=> main
我在IRB控制台中为对象启用了标签完成,但出于某种原因,当我不在当前作用域可用的命名变量上使用它时,它会获取额外的结果:
1.9.3p194 :001 > a = self
=> main
1.9.3p194 :002 > self.
Display all 6870 possibilities? (y or n)
1.9.3p194 :002 > a.
Display all 178 possibilities? (y or n)
< 200方法是可浏览的,所以在那里浏览,我可以看到n
确实是主要对象上的方法。只需验证,输入:
a.n
杀死控制台。这意味着我现在可以找到它定义的位置:
1.9.3p194 :002 > a.method(:n).source_location
=> ["/Users/erichu/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/extend-command.rb", 143]
我被困在这里,因为那个文件动态分配了许多方法,但没有一个我可以用'n'命令辨别。
一位同事建议我在一个新的Rails应用程序中尝试这个,这导致我尝试不同的宝石。快速浏览一下清单后,debugger
似乎更有可能选择。
对于那些读过这篇文章的人,我很乐意重新接受另一个可以解释debugger
宝石引入n
的地点和原因的答案。