lua 5.1, как использовать loadstring для вызова функции, которая не находится в глобальном пространстве имен и требует аргументов - PullRequest
2 голосов
/ 07 мая 2019

пытается создать функцию-оболочку для вызова различных функций проверки. Функции проверки не находятся в глобальном пространстве имен И им требуются параметры. Я использую 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)

1 Ответ

3 голосов
/ 07 мая 2019

Если все, что вы хотите сделать, это вызвать функцию, задать ей несколько аргументов и проверить возвращаемое значение, тогда вам вообще не нужно использовать 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)
...