Luaj 두 개의 다른 Luascripts에서 동일한 이름으로 두 개의 기능을로드합니다.
문제
동일한 이름의 기능이 포함 된 두 개의 LUA 스크립트가 있습니다.
luascripta :
function init()
print( 'This function was run from Script A' )
end
.
luascriptb :
function init()
print( 'This function was run from Script B' )
end
.
Luaj를 전세계 환경으로 사용 하여이 기능을 모두로드하고 싶습니다. 하나의 스크립트에 대해 일반적으로 다음과 같이하십시오.
LuaValue chunk = globals.load(new FileInputStream(luaScriptA), scriptName, "t",
globals);
chunk.call();
.
함수 init ()을 전역에로드하면 Java에서 다음과 같은 기능을 실행할 수 있습니다.
globals.get("init").call();
.
두 번째 스크립트를로드 할 때 문제가 발생하면 이전에 선언 된 동일한 이름의 모든 함수를 덮어 씁니다.두 가지 기능을 쉽게 구별 할 수있는 방법이 있습니까?예를 들어 다음과 같습니다 :
globals.get("luaScriptA").get("init").call(); //Access the init function of script A
globals.get("luaScriptB").get("init").call(); //Access the init function of script B
.
스크립트에는 다른 기능이 포함되어 있으며 내 목표는 스크립트 내의 개별 기능을 실행하는 것입니다. JME 플랫폼에서 완료되었습니다.
해결책
함수를 테이블에 넣으십시오
luascripta :
A = {} -- "module"
function A.init()
print( 'This function was run from Script A' )
end
.
luascriptb :
B = {} -- "module"
function B.init()
print( 'This function was run from Script B' )
end
.
다음
globals.get("A").get("init").call();
globals.get("B").get("init").call();
. 다른 팁
아래의 코드는 자신의 환경에서 스크립트를로드하지만 글로벌을 읽을 수 있지만 글로벌을 읽을 수 없도록 상속받습니다.즉, print
를 호출 할 수 있지만 각각은 자체 init
를 정의합니다.당신은 아마도 Luaj에서 그것을 사용하기 위해 무언가를해야만 할 것입니다. 그러나 나는 무엇을 모른다.
local function myload(f)
local t=setmetatable({},{__index=_G})
assert(loadfile(f,nil,t))()
return t
end
local A=myload("luaScriptA") A.init()
local B=myload("luaScriptA") B.init()
. 제휴하지 않습니다 StackOverflow