2011-12-22 2 views
4

저는 Lua 용 LuaJava와 C 코드를 사용하고 있습니다. Lua를 String으로로드 할 수있는 방법을 알고 싶습니다. 다시 말해, .lua 파일을 처음 String으로 변환합니다. 그런 다음이 문자열의 내용을 Lua에로드하려고합니까? loadstring 함수가 있지만 이것이 어떻게 호출되는지는 확실치 않습니다. 루아가 파일 시스템에서이 파일을 검색하는 것을 원하지 않습니다. 파일을 찾아서 문자열로 변환 한 다음 파일 내용의 문자열 버전을로드하고 싶습니다. 또한 이후 함수 호출을 위해 파일에서 다시로드하지 않고 모듈을 사용할 수있는 상태로 유지하는지 loadstring()을 호출 한 후 알 수 있어야합니다. 감사.파일 대신 Lua 모듈을 문자열로로드하는 방법은 무엇입니까?

답변

3

, 당신은 기능 LuaState.LloadString(String source)을 사용할 수 있습니다.

소스에서 "모듈"을 여러 번로드하지 않으려면 이름을 지정하고 테이블에 플래그를 저장해야합니다. 소스에서 모듈을 다시로드 할 수 있도록 "언로드"를 제공 할 수도 있습니다. 루아에서 다음과 같이 다시 구현할 수 있습니다 :

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

감사합니다. 내가로드 된 후 결과 값을 다시 얻는 후 자바에서 루아 함수를 호출하는 또 다른 문제가 있습니다. 이것 좀보세요 : http://stackoverflow.com/questions/8611948/lua-getting-result-back-in-luajava-from-lua-function-call – Androider

1

는 제가 질문을 이해 모르겠지만 여기에 표시됩니다 : 당신은 /로드 LuaJava에서 문자열을 컴파일해야하는 경우

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

저는 그가 루아가 아닌 호스트 언어로 이야기하고 있다고 확신합니다. –

+0

예, 정확하게하려고하는 것은 Android 응용 프로그램에서 리소스 문자열로 Lua 파일을 읽는 것입니다. 따라서 루아는 파일을 읽지 않고 문자열 만 가져옵니다. 그래서 LuaJava 또는 C 언어에서 loadstring (s)을 실행하는 방법을 알아야합니다. – Androider

+0

또한 위의 코드를 실행 한 후에 위의 코드를 실행하면 후속 루아 코드가 파일에서 해당 모듈을 찾지 않고 'module_defined_in_filename'요구를 성공적으로 수행 할 수 있는지 확인해야합니다. – Androider

관련 문제