我有一个文件“example.lua”:
local function manipulate(something)
return string.rep(something, 3) -- repeats the given string
end
function apiFunction(somethingelse)
return manipulate(somethingelse)
end
和另一个文件(main.lua)任务是“加载”/“执行”它:
loadAPI("example.lua", "externAPI") --< the part i need help with
externAPI.apiFunction("Test") --> should return TestTestTest
应该发生的事情是,example.lua就像
一样被执行dofile("example.lua")
但是example.lua中全局“定义”的内容(在这种情况下是apiFunction)移动到新生成的全局“externAPI”表,其余的(即操作)被隐藏,只能从example.lua文件中获取。 我之前在minecraft mod“ComputerCraft”中看过这个bahaviour,其中有一个名为“os.loadAPI(”/ somepath / sha-2“)的函数,它将定义sha-2-chunk中的定义。由于名称指定为“sha-2”-table。
我一直在寻找这种范围/重定向的东西,但没有解决方案将这些东西放入新表中。
我一直在考虑在新索引之后解析_G表并将它们移到新表中,但我确信这里有一些lua-magicians知道一个更清洁,更好的解决方案。
所有这些都在一个C lua_state *中,所以如果有任何解决方案在C / C ++中添加这个loadAPI函数并且只是在状态下注册它也可以。
我也看过“需要”,但似乎并不了解它是否符合我的要求。
使用Lua 5.2.3
希望我没有忘记任何事情。 在此先感谢:)
〜InDieTasten
答案 0 :(得分:1)
试试这个:
function loadAPI(f,g)
_G[g]=setmetatable({},{__index=_G})
loadfile(f,"bt",_G[g])()
end
loadAPI("example.lua", "externAPI")
print(externAPI.apiFunction("Test"))