plugin1.rb
それを取り込んでロードするルビースクリプトがあります。それから私は電話run
しplugin1
、そのことをします。
その後、ロードplugin2.rb
してから を呼び出しrun
、plugin2
その処理を実行することにするかもしれません。
2 つのプラグインは、実際に実行するための方法を提供するという事実を除けば、互いに何の関係もありませんrun
が、クラスと定数を好きなように定義できます。
クラスの競合などが発生しない理由はないので、プラグインの実行が終了した後にクリーンアップするのが最善だと思います。
プラグインの 1 つを実際にロードする前に、以前のセッションから何かを適切にクリーンアップして、新しいスクリプトの準備ができるように、Ruby スクリプトをどのように記述すればよいですか?
どのようなものを削除する必要があるか、およびそれらを削除する方法を知りたいです。
アップデート
周りを見回すと、 を使用して定義された定数のリストを取得できますObject.constants
。これには、ロードされたすべてのクラスとモジュールが含まれています。
だから私は次の行で何かを考えています
# get start-up constants
initial_consts = Object.constants
# load a plugin
load "plugin1.rb"
# get new constants
new_consts = Object.constants - initial_consts
# run plugin
test = NewClass.new #defined in plugin
test.run
# clean-up new things
new_consts.each {|c| Object.send(:remove_const, c) }
これは、変更されたクラスを「元に戻す」わけではありませんが、私の設計では、プラグインが特定の名前でクラスまたはメソッドを定義できないようになっているため、それほど大きな問題にはなりません。