Luaj 두 개의 다른 Luascripts에서 동일한 이름으로 두 개의 기능을로드합니다.

StackOverflow https://stackoverflow.com//questions/22073216

  •  23-12-2019
  •  | 
  •  

문제

동일한 이름의 기능이 포함 된 두 개의 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()
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top