Rubyで拡張できるアプリケーションがあります。スクリプトはアプリケーション自体で作成でき、編集するたびに再ロードされます。したがって、ユーザーがクラスにメソッドを追加すると、すぐに有効になります。ユーザーがメソッドを削除した場合、そのファイルは存在しなくなるため、変更したファイルを実行することはできません。唯一のオプションは、インタプリタの状態をクリアして、すべてのスクリプトを再度リロードすることです。しかし、Rubyは再起動から自分自身を保護します:( eval.c
)
void ruby_init(void)
{
int state = ruby_setup();
if (state) {
error_print();
exit(EXIT_FAILURE);
}
}
int ruby_setup(void)
{
static int initialized = 0;
int state;
if (initialized)
return 0;
initialized = 1;
/* ... */
return state;
}
ruby_init()
また、複数回呼び出すと、スタックの位置に問題が発生し、rubyが追跡してGCを壊す可能性があると思います。アプリケーション全体を再起動することは、GUIインターフェイスを備えているためオプションではありません。また、アプリケーションに新しいGUI要素を挿入するためのQtインターフェースが公開されているため、すべてのルビーのものを別々のプロセスに保持するのは面倒です。もう1つのオプションは、定義されたすべてのメソッド、クラス、定数などを追跡し、コードを再実行する前にそれらの定義を解除することです。簡単な方法はありますか?