【问题标题】:lua 5.1 how to use loadstring to call a function that is not in global namespace AND requires argumentslua 5.1 如何使用 loadstring 调用不在全局命名空间中且需要参数的函数
【发布时间】:2019-05-07 09:13:45
【问题描述】:

试图创建一个包装函数来调用各种验证函数。验证函数不在全局命名空间中,它们需要参数。我正在使用 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)

【问题讨论】:

    标签: lua arguments


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-08-22
      • 2016-01-21
      • 2013-11-19
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多