2013-09-29 85 views
1

說我有喜歡跨腳本文件共享lua全局變量?

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 

同樣的,當我簡單地dofile處理代替call_script。

基本上,我想要一個特定的腳本文件能夠將「無」分配給現有的全局,因此舊值變爲無法訪問

現在我需要的是實時腳本重新加載 - 無論何時修改腳本文件,它都會立即編譯並在運行時再次使用call_script與其子腳本調用,所以它應該導致全局變量被重新分配,值應該被垃圾收集。

是否有更容易,更喜歡的方式來做這樣的腳本重新加載?

我是否應該以某種方式使用本地或使用環境進行操作? 我使用luabind,如果它是相關的。

+0

考慮在自己的_ENV內對沙箱進行沙箱處理,這樣您就可以爲重新加載的腳本提供新的環境,而不是清理舊的/常見的(可能丟失東西) – dualed

回答

2

如果在同一lua_State內執行腳本,全球實際重新分配(可以檢查變量分配nil之前是可見的)。 C++對象的析構函數在收集對象時運行,這些對象在無法訪問後可能不會立即發生。從C++調用lua_gc()或從Lua調用collectgarbage()可能會有所幫助。

+0

解決了問題! –