LuaJ从两个不同的luascript加载两个同名函数
我有两个包含同名函数的Lua脚本: luaScriptA: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
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()