Reputation: 21335
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.
Upvotes: 5
Views: 2699
Reputation: 16763
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
Upvotes: 3
Reputation: 202735
I'm not sure I understand the question but here goes:
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
Upvotes: 1