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") --< 部分需要帮助的部分
externAPI.apiFunction("Test") -->应返回TestTestTest

应该发生的事情是,example.lua会被执行,就像这样:

dofile("example.lua")

但是,在example.lua中全局“定义”的所有内容(在这种情况下是apiFunction)都移至新生成的全局“externAPI”表,并且其余部分(即manipulate)被隐藏,并且仅从example.lua文件中可用。 我之前在Minecraft模组“ComputerCraft”中看到过这种行为,在其中存在一个名为“os.loadAPI(/somepath/sha-2)”的函数,它会根据所指定的名称在sha-2块中定义定义。

我已经寻找了一段时间这种范围/重定向的东西,但没有解决方案将东西放入新表中。

我一直在考虑在新索引之后解析_G表,并将其移动到新表中,但是我确信这里有一些了解更干净,更有效的解决方案的lua巫师。

所有这些都在一个C lua_state *中,因此如果有任何解决方案将此loadAPI函数添加到C / C ++中并将其注册在状态中,则这也是可以的。

我也看了一下“ require”,但是似乎不理解它是否做我所需要的。

使用Lua 5.2.3

希望我没有忘记任何东西。 预先感谢:

~InDieTasten

点赞
用户107090
用户107090

尝试这样做:

function loadAPI(f,g)
    _G[g]=setmetatable({},{__index=_G})
    loadfile(f,"bt",_G[g])()
end

loadAPI("example.lua", "externAPI")
print(externAPI.apiFunction("Test"))
2014-08-07 16:54:30