5

我正在为 Lua 使用 LuaJava 和 C 代码。我想要做的是读取存储为Android应用程序中的资源字符串的Lua源,以便可以执行读取的Lua源。我需要知道如何使用 LuaJava 或 C 语言来做到这一点。

我想知道如何使用字符串在 Lua 中创建 Lua 模块。

换句话说,我将 Lua 源存储在字符串中的 .lua 文件中。然后我想将此字符串的内容作为可以调用的可用模块加载到 Lua 中。

我看到有一个loadstring()函数,但不确定如何为 LuaJava 或 C 调用它。

我不想让 Lua 在文件系统中搜索这个文件,我会找到该文件并将其转换为字符串。获得字符串后,我需要知道如何将文件内容的字符串副本作为模块加载到 Lua 中,然后我可以调用该模块。

我还想知道在调用之后loadstring(s)模块是否仍可用于后续函数调用,而无需重新加载loadstring()

4

2 回答 2

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
于 2011-12-22T19:27:19.090 回答
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
于 2011-12-22T05:27:24.980 回答