1

如果我在其中输入“n”并返回,Rails 3.2.7 控制台将退出。这不是 IRB 的功能。n 在那里被视为未声明的变量。用 Rails 控制台搜索“n”(不出所料)一无所获。

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

4

2 回答 2

1

Rails 3.1.3 不会发生这种情况。这是一个新的错误,还是有一些东西正在加载到你的 Rails 初始化程序中?

于 2012-09-26T18:40:40.317 回答
0

该方法由debuggergem 添加到主对象中。正如@weexpectedTHIS 所指出的,这不会发生在普通的 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 应用程序中尝试这个,这让我尝试了不同的 gem。快速浏览列表后,debugger似乎是一个更有可能的选择。

对于读到这里的任何人,我很乐意重新接受另一个可以解释debuggergem 引入的位置和原因的答案n

于 2012-10-11T03:23:07.937 回答