lua 5.1 如何使用loadstring调用不在全局命名空间中且需要参数的函数

尝试创建包装器函数来调用各种验证函数。 验证函数不在全局命名空间中且需要参数。 我正在使用Lua 5.1并尝试让loadstring()函数工作,但没有成功。

--包装函数
local function validateField(funcName,funcArg,errorTable)
    local vres
    local functionCall = loadstring("return " .. funcName .. "(...)")

    vres = functionCall(funcArg)

    if vres〜= true then
        table.insert(errorTable,vres)
        return false
    end
    返回真
end

调用代码:

local result = validateField("valid.nameField",data.name,errors)
点赞
用户734069
用户734069

如果你只想调用一个函数,并提供一些参数来检查返回值,那么你完全不需要使用 loadstring。只需要将函数本身作为参数传递给 validateField 即可。

local function validateField(errorTable, func, ...)
    local res = func(...);

    if res ~= true then
        table.insert(errorTable, res)
        return false
    end
    return true
end

然后按照适当的方式进行调用(请注意,我更改了参数的顺序):

local result = validateField(errors, valid.nameField, data.name)
2019-05-07 01:13:45