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

我有一堆生成的模块,命名方案类似于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)

-- 做某些事情并发现我要基于外部因素执行lib1_0函数2

major = 1
minor = 0
func2run = 2

call =“call”..major..“_”..minor..“.type_”..func2run
_G [call](“test1”,“test2”,“test3”)
--不起作用,只是我想做的示例

任何解决方案?我错过了明显的东西吗?我很新于Lua,所以我可能只是错过了显而易见的东西

点赞
用户2242940
用户2242940
call1_0 = require("lib1_0")

-- 期望的输出示例
call1_0.type_2("x","y","z")             --> x     y   z

-- 从各个部分构建出调用
local major, minor, fnum = 1, 0, 2
local args = "'x', 'y', 'z'"
local codestr = string.format("call%d_%d.type_%d(%s)", major, minor, fnum, args)
print(codestr)                          --> call1_0.type_2('x', 'y', 'z')
local code = load(codestr)
code()                                  --> x     y   z

请注意 require() 调用中带引号的部分。另外,查看 Programming in Lua(PiL)第4版,p148-149 以获得有关 load() 的更多信息。

2019-04-19 21:32:26
用户11043724
用户11043724
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

本地变量 call_1 等于载入 lib1_0 的结果。接下来,将 call_1 存储在 package.loaded.call_1 中。

同时,将 lib1_0package.loaded 中删除。

接着,再次载入 lib1_0,并将结果存储在本地变量 call_2 中。

再次将 call_2 存储在 package.loaded.call_2 中,并将 lib1_0package.loaded 中删除。

2019-04-20 07:11:53