Search code examples
lualuajava

How Do I Load Lua Module as a String Instead of a File?


I am using LuaJava and C Code for Lua. What I am trying to do is read Lua source stored as a resource String in an Android application so that the Lua source read in can be executed. I need to know how to do this using LuaJava or C language.

I want to know how I can create a Lua module in Lua by using a String.

In other words, I am storing Lua source that would be stored in a .lua file in a String instead. I then want to load the contents of this string into Lua as an available module that can be called.

I see there is a loadstring() function but not sure how this would be invoked for LuaJava or C.

I don't want Lua to search the file system for this file, I will find the file and convert it to a string. After I have the string, I need to know how to load the string copy of the file contents into Lua as a module that I can then call.

I also want to know if after calling loadstring(s) if the module will remain available for subsequent function calls without having to reload do the loadstring() again.


Solution

  • If you need to load/compile a string from LuaJava, you can use the function LuaState.LloadString(String source).

    If you do not want to load a "module" from source multiple times, you have to assign it a name and save some flag in a table. You can even provide "unloading" so that you could load a module from source again. It could be reimplemented in Lua as follows:

    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