Lua:如何只获取库中的特定函数?

我有一个库文件 service_functions.lua,其中有数百个函数。

function foo1()
------------
end

function foo2()
------------
end

等等

我不想加载所有函数。

现在我这样做:

dofile(script_path.."\\service_functions.lua")

并获取它们。

如何仅获取特定函数?

点赞
用户2858170
用户2858170

从 service_functions.lua 中删除您不想要/不需要的任何函数,或者像 lhf 所示,使用自己的模块将库包装起来。

您无法仅执行 Lua 文件的一部分。该文件将作为一个整体被加载和执行。

或者您也可以不去管它。拥有更多的函数可用并不会对您造成伤害。

2021-01-17 09:39:57
用户107090
用户107090

将你的库书写为下面的形式:

local M={}

function M.foo1()
------------
end

function M.foo2()
------------
end

return M

然后使用以下代码加载库:

local lib=dofile(script_path.."\\service_functions.lua")

使用以下代码提取你需要的函数:

foo1 = lib.foo1
2021-01-17 10:11:22
用户7504558
用户7504558

如果像你在问题中所写的那样,您需要最小的记忆体负荷, 那么也许我的版本会派上用场 模块:

local arg={...}

local function foo1() print("foo1")
end

local function foo2() print("foo2")
end

local function foo3() print("foo3")
end

local function foo4() print("foo4")
end
local M = {foo1=foo1, foo2=foo2, foo3=foo3, foo4=foo4}

if not arg[1] then return M     -- 全部
elseif type(arg[1])=="string" then
    local x = {}
    x[arg[1]] = M[arg[1]]
    return x                   -- 根据名称返回一个函数
elseif type(arg[1])=="table" then
    local res = {}
    for k,v in pairs(arg[1]) do
       res[v] = M[v]
    end
    return  res                 -- 返回一些特定的函数
end

并仅从“数百”个函数中返回所需内容

-- 只载入一个函数

local x = loadfile("funk.lua")("foo1")
x.foo1()

-- 只载入两个函数

local x = loadfile("funk.lua")( { "foo1", "foo2"} )

x.foo1()
x.foo2()

-- 载入所有函数

local x = loadfile("funk.lua")()
x.foo1()
x.foo2()
x.foo3()
x.foo4()
2021-01-17 10:46:04