如果我在其中输入“n”并返回,Rails 3.2.7 控制台将退出。这不是 IRB 的功能。n 在那里被视为未声明的变量。用 Rails 控制台搜索“n”(不出所料)一无所获。
有人可以解释为什么 Rails 引入了这个别名吗?
如果我在其中输入“n”并返回,Rails 3.2.7 控制台将退出。这不是 IRB 的功能。n 在那里被视为未声明的变量。用 Rails 控制台搜索“n”(不出所料)一无所获。
有人可以解释为什么 Rails 引入了这个别名吗?
Rails 3.1.3 不会发生这种情况。这是一个新的错误,还是有一些东西正在加载到你的 Rails 初始化程序中?
该方法由debugger
gem 添加到主对象中。正如@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
似乎是一个更有可能的选择。
对于读到这里的任何人,我很乐意重新接受另一个可以解释debugger
gem 引入的位置和原因的答案n
。