我有两个包含同名函数的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将这两个函数加载到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平台上运行。
答案 0 :(得分:2)
将您的功能放在表格中
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();
答案 1 :(得分:0)
下面的代码在自己的环境中加载脚本,这些脚本继承自全局的脚本以供读取但不能用于写入。换句话说,您可以致电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()