加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何将Lua模块加载为字符串而不是文件?

发布时间:2020-12-14 21:44:49 所属栏目:大数据 来源:网络整理
导读:我正在为Lua使用Lua Java和C Code.我想要做的是读取存储为 Android应用程序中的资源String的Lua源,以便可以执行Lua源读入.我需要知道如何使用LuaJava或C语言执行此操作. 我想知道如何使用String在Lua中创建Lua模块. 换句话说,我正在存储Lua源,它将存储在Stri
我正在为Lua使用Lua Java和C Code.我想要做的是读取存储为 Android应用程序中的资源String的Lua源,以便可以执行Lua源读入.我需要知道如何使用LuaJava或C语言执行此操作.

我想知道如何使用String在Lua中创建Lua模块.

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

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

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

我还想知道在调用loadstring(s)之后,如果模块将继续可用于后续函数调用而不必重新加载,请再次执行loadstring().

解决方法

如果需要从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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读