1

次のようなスクリプトがあるとします

my_global = my_cpp_class()
my_global = nil

これは my_cpp_class のデストラクタを適切に呼び出しますが、このコードは次のことを行いません。

my_global = my_cpp_class()
call_script("a.lua") -- a.lua contains "my_global = nil"
-- "call_script" is actually a simplified notation 
-- I create script as userdata and then I can 
-- set its child scripts that should be reloaded once script is modified

call_script を dofile に置き換えるだけでも同じです。

基本的に、特定のスクリプト ファイルで既存のグローバルに「nil」を割り当てて、古い値がunreachableになるようにしたいと考えています。

これが必要なのは、スクリプトをリアルタイムでリロードすることです。スクリプト ファイルが変更されるとすぐにコンパイルされcall_script、実行時に子スクリプトで再度呼び出されるため、グローバルが再割り当てされ、古い値がガベージ コレクションされる必要があります。 .

このようなスクリプトのリロードを行うためのより簡単で好ましい方法はありますか?

何らかの方法でローカルを使用するか、環境を操作する必要がありますか? 関連する場合は、luabind を使用します。

4

1 に答える 1

2

同じ 内でスクリプトを実行するとlua_State、グローバルが実際再割り当てされます (変数を割り当てる前に、変数が表示されていることを確認できますnil)。C++ オブジェクトのデストラクタは、オブジェクトが収集されたときに実行されますが、到達不能になった直後には実行されない場合があります。lua_gc()C++ またはcollectgarbage()Luaからの呼び出しがおそらく役立つでしょう。

于 2013-09-29T14:44:19.773 に答える