20

メモリ内のrubygemを「リロード」または「リフレッシュ」する方法はありますか?irbでプレイしているときに、gemファイルを変更したい場合があります。同じgemが必要な場合、メモリに更新されず、出力が「false」になります。現在、私はIRBを終了し、IRBに戻ってから、再び宝石を要求する必要があります。より良い方法が必要です...それは何ですか?

4

3 に答える 3

18

他の人が示唆しているように、Kernel#loadを使用できます。ただし、必要なすべてのファイルは$ "に保存されるため、各gemファイルを見つけてロードする時間を無駄にしないでください。この知識を備えたreloadirbコマンドは次のとおりです。

 def reload(require_regex)
  $".grep(/^#{require_regex}/).each {|e| load(e) }
 end

たとえば、irbでhirb gemを使用している場合は、次のようにリロードするだけです。

>> reload 'hirb'

なんらかの理由でロードが機能しない場合(ファイル拡張子については必要以上にうるさい)、最初に$ "のエントリを削除することで、ファイルを再要求できます。このアドバイスを使用すると、上記のコマンドは次のようになります。

 def reload(require_regex)
   $".grep(/^#{require_regex}/).each {|e| $".delete(e) && require(e) }
 end

自分に合ったものを選んでください。個人的には後者を使用しています。

于 2010-08-12T07:38:18.870 に答える
8

'filename.rb'をロードします

変更されたものごとに一度に1つずつ...

于 2010-08-11T22:01:25.143 に答える
6

1つの方法はを使用することKernel#loadです。Kernel#requireファイル拡張子を明示的に含める必要があることを除けば、とほとんど同じように使用できます。ただし、欠点があり(class Foo < Struct.new(:foo); endクラスのスーパークラスを変更できないため、失敗するような単純なものでも)、これを行うためのより良い方法も知りたいと思います。

Railsreload!では、スクリプト/コンソールでこれを実現できますが、どのような魔法を使用しているかはわかりません。

この要点は有望に見えますが、私はそれをテストしていません。

于 2010-08-11T22:34:07.377 に答える