Lua:将extern函数定义重定向到指定的表

时间:2014-08-07 16:43:55

标签: c++ lua

我有一个文件“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

1 个答案:

答案 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"))