为什么Rails控制台退出' n'?

时间:2012-09-26 18:38:42

标签: ruby-on-rails console

如果我在其中键入'n'并返回,则Rails 3.2.7控制台退出。这不是IRB的特征; n在那里被视为未声明的变量。使用rails控制台(不出所料)谷歌搜索'n'没有任何结果。

有人可以解释为什么Rails会引入这个别名吗?

2 个答案:

答案 0 :(得分:1)

使用rails 3.1.3不会发生这种情况。这是一个新的错误还是在你的rails初始化器中加载的东西正在这样做?

答案 1 :(得分:0)

该方法由debugger gem添加到主对象中。正如@weexpectedTHIS指出的那样,这不会发生在一个vanilla Rails应用程序中。取消注释gem 'debugger'bundle installn即可退出。


只是为了好玩,我想我会投入一些侦探工作。 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的地点和原因的答案。