首页 > 解决方案 > lua 5.1 如何使用 loadstring 调用不在全局命名空间中且需要参数的函数

问题描述

试图创建一个包装函数来调用各种验证函数。验证函数不在全局命名空间中,它们需要参数。我正在使用 Lua 5.1 并试图让 loadstring() 函数工作但没有任何运气。

-- wrapper function
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
    return true
end

调用代码:

local result = validateField("valid.nameField" , data.name, errors)

标签: luaarguments

解决方案


如果你只想调用一个函数,给它一些参数,然后检查返回值,那么你根本不需要使用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)

推荐阅读