2011-12-22 45 views
4

我使用LuaJava和Lua的C代碼。我想知道如何將Lua模塊作爲字符串加載到Lua中。換句話說,我首先將.lua文件轉換爲字符串。然後我想把這個字符串的內容加載到Lua中?我看到有一個loadtring函數,但不知道如何調用它。我不想讓Lua搜索這個文件的文件系統,我找到了這個文件,將它轉換爲一個字符串,然後我想加載字符串版本的文件內容?而且我也想知道在調用loadtring之後,如果模塊保持可用而不需要從文件中重新加載以用於隨後的函數調用。謝謝。如何將Lua模塊作爲字符串加載而不是文件?

回答

3

如果您需要加載/編譯從LuaJava一個字符串,你可以使用函數LuaState.LloadString(String source)

如果您不想從源多次加載「模塊」,則必須爲其分配一個名稱並在表中保存一些標誌。您甚至可以提供「卸載」,以便您可以再次從源加載模塊。它可以在Lua中重新實現,如下所示:

do 
    local loadedModules = {} -- local so it won't leak to _G 
    function loadModule(name, source) 
    if loadedModules[name] then return loadedModules[name] end 
    loadedModules[name] = assert(loadstring(source))() or true 
    end 
    function unloadModule(name) 
    loadedModules[name] = nil 
    end 
end 
+0

謝謝。我有另一個問題,它在加載並獲取結果值後從java調用Lua函數。請看看這個:http://stackoverflow.com/questions/8611948/lua-getting-result-back-in-luajava-from-lua-function-call – Androider

1

我不知道我理解的問題,但這裏有雲:

local f = io.open(filename) 
local s = f:read '*a' -- read the entire contents of the file 
f:close() 
assert(loadstring(s))() -- parse and run string `s` as Lua code 
+1

我確信他在用宿主語言討論,而不是在Lua中。 –

+0

是的,我正在嘗試做的是讀取Lua文件作爲Android應用程序中的資源字符串。因此,Lua將永遠不會讀取文件,而只會讀取一個字符串。所以我想我需要知道如何從LuaJava或C語言運行加載字符串。 – Androider

+0

此外,我需要確認在上面運行上面的代碼後,後續的lua代碼可以成功執行require'module_defined_in_filename',而無需在文件中查找該模塊。 – Androider

相關問題