Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LuaJ从两个不同的luascript加载两个同名函数_Lua_Luaj - Fatal编程技术网

LuaJ从两个不同的luascript加载两个同名函数

LuaJ从两个不同的luascript加载两个同名函数,lua,luaj,Lua,Luaj,我有两个包含同名函数的Lua脚本: luaScriptA: function init() print( 'This function was run from Script A' ) end A = {} -- "module" function A.init() print( 'This function was run from Script A' ) end luaScriptB: function init() print( 'This function was ru

我有两个包含同名函数的Lua脚本:

luaScriptA:

function init() 
print( 'This function was run from Script A' )
end
A = {} -- "module"
function A.init() 
    print( 'This function was run from Script A' )
end
luaScriptB:

function init() 
print( 'This function was run from Script B' )
end
B = {} -- "module"
function B.init() 
    print( 'This function was run from Script B' )
end
我想使用LuaJ将这两个函数加载到globals环境中,对于一个脚本,我通常按如下方式执行:

LuaValue chunk = globals.load(new FileInputStream(luaScriptA), scriptName, "t",
globals);
chunk.call();
这将把函数init()加载到globals中,我可以通过以下方式从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:

function init() 
print( 'This function was run from Script A' )
end
A = {} -- "module"
function A.init() 
    print( 'This function was run from Script A' )
end
luaScriptB:

function init() 
print( 'This function was run from Script B' )
end
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()