2011-12-22 2 views
4

Я использую LuaJava, а также код C для Lua. Я хочу знать, как я могу загрузить модуль Lua в Lua как String. Другими словами, я сначала конвертирую файл .lua в String. Затем я хочу загрузить содержимое этой строки в Lua? Я вижу, что есть функция loadstring, но не уверен, как это будет вызвано. Я не хочу, чтобы Lua искал файловую систему для этого файла, я нашел файл, преобразовал его в строку, а затем я хочу загрузить строковую версию содержимого файла? И я также хочу знать, если после вызова loadstring (s), если модуль останется доступным без перезагрузки из файла для последующих вызовов функций. Благодарю.Как загрузить модуль Lua в виде строки вместо файла?

ответ

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 
+0

Спасибо. У меня есть еще одна проблема, которая вызывает функцию Lua из java после ее загрузки и получения значения результата. Пожалуйста, взгляните на это: http://stackoverflow.com/questions/8611948/lua-getting-result-back-in-luajava-from-lua-function-call – Androider

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 
+1

Я уверен, что он говорит на языке хозяина, а не в Lua. –

+0

Да, то, что я точно пытаюсь сделать, это прочитать файл Lua в качестве ресурса String в приложении для Android. Поэтому Lua никогда не прочитает файл, а возьмет только строку. Поэтому я предполагаю, что мне нужно знать, как запускать loadstring (s) из LuaJava или языка C. – Androider

+0

Кроме того, мне нужно подтвердить, что после запуска вышеприведенного выше кода последующий код lua может потребовать «module_defined_in_filename» успешно, не ища этот модуль в файле. – Androider

Смежные вопросы