メモリ内のrubygemを「リロード」または「リフレッシュ」する方法はありますか?irbでプレイしているときに、gemファイルを変更したい場合があります。同じgemが必要な場合、メモリに更新されず、出力が「false」になります。現在、私はIRBを終了し、IRBに戻ってから、再び宝石を要求する必要があります。より良い方法が必要です...それは何ですか?
3 に答える
他の人が示唆しているように、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
自分に合ったものを選んでください。個人的には後者を使用しています。
'filename.rb'をロードします
変更されたものごとに一度に1つずつ...
1つの方法はを使用することKernel#load
です。Kernel#require
ファイル拡張子を明示的に含める必要があることを除けば、とほとんど同じように使用できます。ただし、欠点があり(class Foo < Struct.new(:foo); end
クラスのスーパークラスを変更できないため、失敗するような単純なものでも)、これを行うためのより良い方法も知りたいと思います。
Railsreload!
では、スクリプト/コンソールでこれを実現できますが、どのような魔法を使用しているかはわかりません。
この要点は有望に見えますが、私はそれをテストしていません。