1

「n」と入力して戻ると、Rails 3.2.7 コンソールが終了します。これは IRB の機能ではありません。そこでは、n は宣言されていない変数として扱われます。Railsコンソールで「n」をグーグル検索しても(当然のことながら)何も見つかりませんでした。

Railsがこのエイリアスを導入する理由を誰か説明できますか?

4

2 に答える 2

1

これは、Rails 3.1.3 では発生しません。これは新しいバグですか、それともこれを実行しているレール初期化子にロードされている何かがありますか?

于 2012-09-26T18:40:40.317 に答える
0

debuggerメソッドは、 gemによってメイン オブジェクトに追加されます。@weexpectedTHIS が指摘したように、これは通常の 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 アプリでこれを試すように勧めてくれたので、さまざまな gem を試してみることにしました。リストをざっと見てみるdebuggerと、より可能性の高い選択肢のように思えました。

debuggerここまで読んだ人なら誰でも、 gem が導入される場所と理由を説明できる別の回答を喜んで受け入れますn

于 2012-10-11T03:23:07.937 に答える