我正在为Lua使用LuaJava和C代码。我想要做的是读取存储为Android应用程序中的资源String的Lua源,以便可以执行Lua源读入。我需要知道如何使用LuaJava或C语言来做到这一点。
我想知道如何使用String在Lua中创建一个Lua模块。
换句话说,我正在存储将存储在String中的.lua文件中的Lua源代码。然后我想将此字符串的内容加载到Lua中作为可以调用的可用模块。
我看到有一个loadstring()
函数,但不确定如何为LuaJava或C调用它。
我不希望Lua在文件系统中搜索此文件,我会找到该文件并将其转换为字符串。在我有了字符串之后,我需要知道如何将文件内容的字符串副本加载到Lua作为我可以调用的模块。
我还想知道在调用loadstring(s)
之后,如果模块将继续可用于后续函数调用而不必重新加载,请再次执行loadstring()
。
答案 0 :(得分: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
答案 1 :(得分: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