如何在模块中动态构建对函数的调用

时间:2019-04-19 17:06:08

标签: module lua

我有一堆生成的模块,其命名方案类似于lib1_0,其中1是主要版本,0是次要版本。每个函数内部约有300个名为type_156的函数。

我收集输入并根据外部因素拼凑需要从哪个模块执行哪个功能。

我希望能够根据这些因素拼凑一个函数调用

我尝试了各种loadstring()(仅适用于本地内容,不适用于模块)_G [],看起来像是同一件事

lib1_0.lua

local lib1_0 = {}

function lib1_0.type_1(arg1, arg2, arg3)
    print(arg1, arg2, arg3)
end

function lib1_0.type_2(arg1, arg2, arg3)
    print(arg1, arg2, arg3)
end

return lib1_0

mainfile.lua

call1_0 = require(lib1_0)
call1_2 = require(lib1_2)
call2_0 = require(lib2_0)

-- do stuff and find that I want to execute lib1_0 function 2 based on external factors

major = 1
minor = 0
func2run = 2

call = "call" .. major .. "_" .. minor .. ".type_" .. func2run
_G[call]("test1", "test2", "test3")
--does not work, just an example of what I want to do

有解决方案吗?我缺少明显的东西吗?我对Lua很陌生,所以我很想念显而易见的东西

2 个答案:

答案 0 :(得分:0)

请注意require()调用中的引号。 另外,有关load()的更多信息,请参见Lua编程(PiL)第4版,p148-149。

apple24

答案 1 :(得分:0)

local call_1 = require(lib1_0)
package.loaded.call_1 = call_1
package.loaded["lib1_0"] = nil

local call_2 = require(lib1_0)
package.loaded.call_2 = call_2
package.loaded["lib1_0"] = nil