「n」と入力して戻ると、Rails 3.2.7 コンソールが終了します。これは IRB の機能ではありません。そこでは、n は宣言されていない変数として扱われます。Railsコンソールで「n」をグーグル検索しても(当然のことながら)何も見つかりませんでした。
Railsがこのエイリアスを導入する理由を誰か説明できますか?
「n」と入力して戻ると、Rails 3.2.7 コンソールが終了します。これは IRB の機能ではありません。そこでは、n は宣言されていない変数として扱われます。Railsコンソールで「n」をグーグル検索しても(当然のことながら)何も見つかりませんでした。
Railsがこのエイリアスを導入する理由を誰か説明できますか?
これは、Rails 3.1.3 では発生しません。これは新しいバグですか、それともこれを実行しているレール初期化子にロードされている何かがありますか?
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
。