2014-04-17 1 views
0

내가 전역의 environnment에 LuaJ를 사용하여 다른 루아 스크립트를로드하고 전역 테이블에 기존 항목을 무시 방지하는 방법 :LuaJ 자바에서 다음과 같이

globals = JmePlatform.standardGlobals(); 
LuaValue chunk = globals.load(new FileInputStream(luaScriptA), scriptName, "t", globals); 
chunk.call(); 

내 문제는 예를 들어 SCRIPTNAME는 을 될 일 경우 필요, 인쇄, 오류, 수학 이미, 스크립트가 실제로/교체 등의 인쇄로 실제 기능보다 우선합니다

globals = JmePlatform.standardGlobals(); 

를 호출 한 후 전역에 존재하는 다른 이름입니다.

이 문제를 방지하는 간단한 방법이 있습니까? 스크립트가 업데이트 될 때 실제로, 기존 스크립트를 오버라이드 (override) 할 필요가 있다는 경우가 있기 때문에

if (globals.get(scriptName) != Globals.NIL) { 
    //then dont allow script load 
} 

나를 위해 작동하지 않습니다 같은

불행하게도 테스트.

답변

1

정확한 이유로 전역 범위에 라이브러리를 저장하지 마십시오. required을 사용하여 모듈 및 라이브러리를로드하는 방법은 http://www.luafaq.org/#T1.37.2을 참조하십시오. 나는 이것이 LuaJ에서 작동하는지 확실하지 않지만, require을 정확하게 구현한다면, 로더 기능을 만들어 package.loaders에 넣을 수있다.

-- foo.lua 
local M = {} 

function M.bar() 
    print("bar!") 
end 

return M 

을 그리고 다음과 같이 가져 오기 :

기본적으로, 당신은 다음과 같이 당신의 라이브러리를 정의

-- main.lua 
local Foo = require "foo" 
Foo.bar() -- prints "bar!" 

가 로딩 기능을 구현하기위한 documentation of require를 참조하십시오.